假设我有一个void方法,它只对对象进行转换,而不返回任何值,我想在流map()函数的上下文中使用它,如下所示:
public ListgetList(){ List objList = ... return objList.stream().map(e -> transform(e, e.getUuid())).collect(Collectors.toList()); } private void transform(MyObject obj, String value){ obj.setUuid("prefix" + value); }
这个例子是为了简单起见 - 实际的方法是做其他事情,而不仅仅是弄乱对象的UUID.
无论如何,如何在上述场景中使用void方法?当然,我可以让方法返回转换后的对象,但这是除了点之外并且违反了设计(方法应该是无效的).
似乎这是强制使用java 8流的情况.相反,你可以用forEach实现它.
ListobjList = ... objList.forEach(e -> transform(e, e.getUuid())); return objList;
如果您确定这是您想要做的,那么使用peek而不是map
除了Eugene的答案,您可以使用Stream::map
如下:
objList.stream() .map(e -> { transform(e, e.getUuid()); return e; }).collect(Collectors.toList());
实际上,您不希望转换当前元素并将其收集到新元素中List
.
相反,您希望为您的每个条目应用一种方法List
.
因此你应该使用Collection::forEach
并返回List
.
ListobjList = ...; objList.forEach(e -> transform(e, e.getUuid())); return objList;