Java 8 将函数应用于流的所有元素,而不会中断流链

2022-08-31 15:25:31

在Java中,有没有办法在不破坏链的情况下将函数应用于a的所有元素?我知道我可以调用 ,但该方法返回一个,而不是一个。StreamStreamforEachvoidStream


答案 1

(至少)有3种方法。为了示例代码,我假设您要调用 2 个使用者方法和:methodAmethodB

A. 用途 :peek()

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

虽然文档说只将其用于“调试”,但它可以正常工作(并且现在正在生产中)

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

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

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

C. 在 以下位置执行两项操作:forEach()

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

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


答案 2

您正在寻找 的函数。Streammap()

例:

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

推荐