我有一个Stream<A>
的n+1
元素和函数 B map(A a1,A a2)
它采用 A
的两个元素并返回 B
的一个元素。现在我想得到一个Stream<B>
的n
元素使得 i
新流的第-个元素是 map(a[i],a[i+1])
的结果(这里我当然非正式地使用了方括号)。你会怎么做?
奖励:是否有一个更通用的解决方案可以转换 Stream<A>
的n-m+1
使用函数的元素B map(A a1,A a2,...,A am)
到 Stream<B>
的n
元素?
最佳答案
那么你可以使用我的图书馆 StreamEx它的功能完全可以解决您的第一个任务:
Stream<A> src = //...
Stream<B> res = StreamEx.of(src).pairMap(this::map);
内部有一个自定义spliterator这个函数的背后。因此,如果您不需要额外的依赖项,您可以在项目中实现类似的 spliterator。
由于多种原因,我没有为奖励任务实现更通用的解决方案。然而protonpack中有类似的功能图书馆。通过这个库,您的任务可以解决为:
Stream<B> res = StreamUtils.windowed(src, 2).map(l -> map(l.get(0), l.get(1)));
但它不能并行化。我的分离器并行性非常好。
关于java - 使用 "B map(A a1,A a2)"将 Stream<A> 转换为 Stream<B>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30309420/