实现一个最简单的类似spark的流式处理流程
包含map和filter
数据
type Stream struct {
data []int
}
map函数
func (s Stream) Map(f func(int) int) Stream {
res := make([]int, 0, len(s.data))
for _, item := range s.data {
res = append(res, f(item))
}
return Stream{res}
}
fliter函数
func (s Stream) Filter(f func(int) bool) Stream {
res := []int{}
for _, item := range s.data {
if f(item) {
res = append(res, item)
}
}
return Stream{res}
}
所有数据+1 > 过滤出偶数 > 过滤出大于5的数
func main() {
stream := Stream{[]int{1, 3, 5, 7, 8}}
fmt.Println(stream.data)
stream = stream.
Map(func(i int) int { return i + 1 }).
Filter(func(i int) bool { return i%2 == 0 }).
Filter(func(i int) bool { return i >5})
fmt.Println(stream.data)
>>>[1 3 5 7 8]
[6 8]
}
网友评论