java - 使用 "B map(A a1,A a2)"将 Stream<A> 转换为 Stream<B>

标签 java java-8 java-stream

我有一个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/

相关文章:

java - 在 Kubernetes 中为具有多个映射的 Java Web 服务公开 nodePort - 如何

java - QProcess 不启动 java 应用程序

Java 创建具有特定状态代码的自定义异常类

java - 如何在 Java 8 中实现构建器模式?

Java 8 将 for 循环和值的总和转换为流/lambda?

java - 将所有逗号替换为句点,反之亦然?

java - 使用 JRebel 从 Eclipse 部署 Web 项目

java - 如何使用流替换两个循环并保留列表中相同的元素

java - 使用 Java 8 更改列表中元素的所有位置

java - 如何从通用集合中获取流?