Java 8 在不破坏流链的情况下将函数应用于 Stream 的所有元素

新手上路,请多包涵

Java 中有没有一种方法可以将函数应用于 Stream 的所有元素而不破坏 Stream 链?我知道我可以调用 forEach ,但该方法返回 void ,而不是 Stream

原文由 alexgbelov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 342
2 个回答

有(至少)3种方式。为了示例代码,我假设您想调用 2 个消费者方法 methodAmethodB

A. 使用 peek()

 list.stream().peek(x -> methodA(x)).forEach(x -> methodB(x));

尽管文档说只将它用于“调试”,但它确实有效(并且现在正在生产中)

B、使用 map() 调用方法A,然后将元素返回到流中:

 list.stream().map(x -> {method1(x); return x;}).forEach(x -> methodB(x));

这可能是最“可接受”的方法。

C. 在 forEach() 中做两件事:

 list.stream().forEach(x -> {method1(x); methodB(x);});

这是最不灵活的,可能不适合您的需要。

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

您正在寻找 Streammap() 函数。

例子:

 List<String> strings = stream
.map(Object::toString)
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

原文由 csenga 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题