我试图使用流来做一些事情,我想我有一个概念上的误解。我试图获取一个数组,将其转换为流,并且数组中的.forEach项我想运行一个函数,并从foreach返回该函数的结果列表。基本上是这样的:
Thing[] functionedThings = Array.stream(things).forEach(thing -> functionWithReturn(thing))
这可能吗?我用错流函数了吗?
q3qa4bjr1#
您要查找的操作称为map操作:
map
Thing[] functionedThings = Arrays.stream(things).map(thing -> functionWithReturn(thing)).toArray(Thing[]::new);
此方法用于将一个对象“Map”到另一个对象;引用Javadoc的话,它说得更好:返回一个流,该流由将给定函数应用于此流的元素的结果组成。注意,使用toArray(generator)方法将Stream转换回数组;使用的生成器是一个返回新的Thing数组的函数(这里实际上是一个方法引用)。
toArray(generator)
cedebl8k2#
您需要map not for Each
List<Thing> functionedThings = Array.stream(things).map(thing -> functionWithReturn(thing)).collect(Collectors.toList());
或者,如果您想要一个数组,就像Holger在评论中说的那样,直接在流上使用toArray()。
toArray()
9o685dep3#
在我的例子中,我必须使用Thing的一些setter,所以使用peek(...)
Thing
peek(...)
List<Thing> functionedThings = Array.stream(things) .peek(thing -> thing.setSuccess(true)) .collect(Collectors.toList());
3条答案
按热度按时间q3qa4bjr1#
您要查找的操作称为
map
操作:此方法用于将一个对象“Map”到另一个对象;引用Javadoc的话,它说得更好:
返回一个流,该流由将给定函数应用于此流的元素的结果组成。
注意,使用
toArray(generator)
方法将Stream转换回数组;使用的生成器是一个返回新的Thing数组的函数(这里实际上是一个方法引用)。cedebl8k2#
您需要map not for Each
或者,如果您想要一个数组,就像Holger在评论中说的那样,直接在流上使用
toArray()
。9o685dep3#
在我的例子中,我必须使用
Thing
的一些setter,所以使用peek(...)