从forEach java 8获取返回列表

o8x7eapl  于 2023-01-19  发布在  Java
关注(0)|答案(3)|浏览(158)

我试图使用流来做一些事情,我想我有一个概念上的误解。我试图获取一个数组,将其转换为流,并且数组中的.forEach项我想运行一个函数,并从foreach返回该函数的结果列表。
基本上是这样的:

Thing[] functionedThings = Array.stream(things).forEach(thing -> functionWithReturn(thing))

这可能吗?我用错流函数了吗?

q3qa4bjr

q3qa4bjr1#

您要查找的操作称为map操作:

Thing[] functionedThings = Arrays.stream(things).map(thing -> functionWithReturn(thing)).toArray(Thing[]::new);

此方法用于将一个对象“Map”到另一个对象;引用Javadoc的话,它说得更好:
返回一个流,该流由将给定函数应用于此流的元素的结果组成。
注意,使用toArray(generator)方法将Stream转换回数组;使用的生成器是一个返回新的Thing数组的函数(这里实际上是一个方法引用)。

cedebl8k

cedebl8k2#

您需要map not for Each

List<Thing> functionedThings = Array.stream(things).map(thing -> functionWithReturn(thing)).collect(Collectors.toList());

或者,如果您想要一个数组,就像Holger在评论中说的那样,直接在流上使用toArray()

9o685dep

9o685dep3#

在我的例子中,我必须使用Thing的一些setter,所以使用peek(...)

List<Thing> functionedThings = Array.stream(things)
    .peek(thing -> thing.setSuccess(true))
    .collect(Collectors.toList());

相关问题