Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java是否使用void方法进行流映射?_Java_Java 8_Java Stream - Fatal编程技术网

Java是否使用void方法进行流映射?

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

假设我有一个void方法,它只对一个对象进行转换,不返回任何值,我想在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());
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的设计是为了调试。