Java是否使用void方法进行流映射?
假设我有一个void方法,它只对一个对象进行转换,不返回任何值,我想在stream map()函数的上下文中使用它,如下所示:Java是否使用void方法进行流映射?,java,java-8,java-stream,Java,Java 8,Java Stream,假设我有一个void方法,它只对一个对象进行转换,不返回任何值,我想在stream map()函数的上下文中使用它,如下所示: public List<MyObject> getList(){ List<MyObject> objList = ... return objList.stream().map(e -> transform(e, e.getUuid())).collect(Collectors.toList()); } private
public List<MyObject> getList(){
List<MyObject> objList = ...
return objList.stream().map(e -> transform(e, e.getUuid())).collect(Collectors.toList());
}
private void transform(MyObject obj, String value){
obj.setUuid("prefix" + value);
}
objList.stream()
.map(e -> {
transform(e, e.getUuid());
return e;
}).collect(Collectors.toList());
public List getList(){
列表对象列表=。。。
返回objList.stream().map(e->transform(e,e.getUuid()).collect(Collectors.toList());
}
私有void转换(MyObject对象,字符串值){
对象setUuid(“前缀”+值);
}
这个例子是为了简单而设计的——实际的方法不仅仅是搞乱对象的UUID
无论如何,在上述场景中如何使用void方法?
当然,我可以让该方法返回转换后的对象,但这不是重点,并且违反了设计(该方法应该是无效的)。如果您确定这是您想要做的,那么使用peek而不是map似乎这是强制使用Java8流的情况。相反,您可以使用forEach实现它
List<MyObject> objList = ...
objList.forEach(e -> transform(e, e.getUuid()));
return objList;
列表对象列表=。。。
forEach(e->transform(e,e.getUuid());
返回对象列表;
此外,您还可以像这样使用Stream::map
:
public List<MyObject> getList(){
List<MyObject> objList = ...
return objList.stream().map(e -> transform(e, e.getUuid())).collect(Collectors.toList());
}
private void transform(MyObject obj, String value){
obj.setUuid("prefix" + value);
}
objList.stream()
.map(e -> {
transform(e, e.getUuid());
return e;
}).collect(Collectors.toList());
实际上,您不想转换当前元素并将其收集到新的列表中
相反,您希望为列表中的每个条目应用一种方法
因此,您应该使用Collection::forEach
并返回列表
List<MyObject> objList = ...;
objList.forEach(e -> transform(e, e.getUuid()));
return objList;
列表对象列表=。。。;
forEach(e->transform(e,e.getUuid());
返回对象列表;
这不是一个好方法,因为peek的设计是为了调试。