Java 8 Streams 不允许重用。这就产生了一个关于如何在创建滑动窗口通量来计算像 x(i)*x(i-1) 这样的关系时重用流的难题。
以下代码基于移位运算符的思想。我使用 skip(1) 移动第一个流以创建第二个流。
Flux<Integer> primary = Flux.fromStream(IntStream.range(1, 10).boxed());
Flux<Integer> secondary = primary.skip(1);
primary.zipWith(secondary)
.map(t -> t.getT1() * t.getT2())
.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
这是上述代码的可视化表示:
1 2 3 4 5 6 7 8 9 10
v v v v v v v v v v skip(1)
2 3 4 5 6 7 8 9 10
v v v v v v v v v v zipWith
1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 …Run Code Online (Sandbox Code Playgroud)