Skip to content

Commit e853284

Browse files
author
1399852153
committed
java实现 流 collect
1 parent c108570 commit e853284

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

src/main/java/stream/Stream.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,22 +90,28 @@ public Stream<T> limit(int n) {
9090
}
9191
);
9292

93+
// 求值链条 加入一个新的process limit
9394
return this;
9495
}
9596

9697
@Override
9798
public void forEach(ForEach<T> consumer) {
99+
// 终结操作 直接开始求值
98100
forEach(consumer,this.eval());
99101
}
100102

101103
@Override
102104
public <R> R reduce(R initVal, Accumulate<R, T> accumulator) {
105+
// 终结操作 直接开始求值
103106
return reduce(initVal,accumulator,this.eval());
104107
}
105108

106109
@Override
107110
public <R, A> R collect(Collector<T, A, R> collector) {
108-
A result = collect(collector,this);
111+
// 终结操作 直接开始求值
112+
A result = collect(collector,this.eval());
113+
114+
// 通过finish方法进行收尾
109115
return collector.finisher().apply(result);
110116
}
111117

src/test/java/TestMyStream.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
import function.Accumulate;
2+
import function.Supplier;
3+
import stream.Collector;
14
import stream.Stream;
25
import stream.StreamGenerator;
36

7+
import java.util.function.Function;
8+
49
/**
510
* @Author xiongyx
611
* @Date 2019/3/6
@@ -10,15 +15,35 @@ public class TestMyStream {
1015
public static void main(String[] args){
1116
Stream<Integer> intStream = StreamGenerator.getIntegerStream(10);
1217

13-
intStream = intStream.filter(TestMyStream::idOdd);
18+
// intStream = intStream.filter(TestMyStream::idOdd);
1419
// intStream = intStream.map(TestMyStream::scaleTwo);
1520
intStream = intStream.map(TestMyStream::square);
16-
intStream = intStream.limit(3);
21+
// intStream = intStream.limit(3);
1722

1823
// Integer sum = intStream.reduce(0,(v1,v2) -> v1 + v2);
1924
// System.out.println(sum);
2025

21-
intStream.forEach(System.out::print);
26+
// intStream.forEach(System.out::print);
27+
28+
Integer sum = intStream.collect(new Collector<Integer, Integer, Integer>() {
29+
@Override
30+
public Accumulate<Integer, Integer> accumulator() {
31+
return (t1, t2) -> t1 + t2;
32+
}
33+
34+
@Override
35+
public Supplier<Integer> supplier() {
36+
return () -> 10;
37+
}
38+
39+
@Override
40+
public Function<Integer, Integer> finisher() {
41+
return integer -> integer;
42+
}
43+
});
44+
System.out.println(sum);
45+
46+
// intStream.forEach(System.out::print);
2247
}
2348

2449
private static boolean idOdd(int num){

0 commit comments

Comments
 (0)