golang实现简单的流式处理

实现一个最简单的类似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]
}

你可能感兴趣的:(golang实现简单的流式处理)