-
Notifications
You must be signed in to change notification settings - Fork 0
/
mapper.go
42 lines (35 loc) · 973 Bytes
/
mapper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package stream
func Map[In, Out any](in Stream[In], mapper func(In) Out) Stream[Out] {
return Stream[Out]{
src: mapperStream[In, Out]{
src: in.src,
mapper: mapper,
},
}
}
func MapBy[In, Out any](mapper func(In) Out) func(Stream[In]) Stream[Out] {
return ApplyRight(Map[In, Out], mapper)
}
func FlatMap[In, Out any](in Stream[In], mapper func(In) Stream[Out]) Stream[Out] {
return Stream[Out]{
src: flattenStream[Out]{
parent: mapperStream[In, Stream[Out]]{
src: in.src,
mapper: mapper,
},
},
}
}
func FlatMapBy[In, Out any](mapper func(In) Stream[Out]) func(Stream[In]) Stream[Out] {
return ApplyRight(FlatMap[In, Out], mapper)
}
type mapperStream[In, Out any] struct {
src streamer[In]
mapper func(In) Out
}
func (m mapperStream[In, Out]) forEach(f func(Out) bool) {
m.src.forEach(func(value In) bool {
return f(m.mapper(value))
})
}
func (m mapperStream[In, Out]) capacityHint() int { return m.src.capacityHint() }