当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Java使用void方法进行流映射?》经验,为你挑选了3个好方法。

假设我有一个void方法,它只对对象进行转换,而不返回任何值,我想在流map()函数的上下文中使用它,如下所示:

public List getList(){
    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方法?当然,我可以让方法返回转换后的对象,但这是除了点之外并且违反了设计(方法应该是无效的).



1> Murat Karagö..:

似乎这是强制使用java 8流的情况.相反,你可以用forEach实现它.

List objList = ...
objList.forEach(e -> transform(e, e.getUuid()));
return objList;



2> Eugene..:

如果您确定这是您想要做的,那么使用peek而不是map


这不是一个好方法,因为peek的设计仅用于调试目的。https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#peek-java.util.function.Consumer-

3> Flown..:

除了Eugene的答案,您可以使用Stream::map如下:

objList.stream()
   .map(e -> {
      transform(e, e.getUuid()); 
      return e;
   }).collect(Collectors.toList());

实际上,您不希望转换当前元素并将其收集到新元素中List.

相反,您希望为您的每个条目应用一种方法List.

因此你应该使用Collection::forEach并返回List.

List objList = ...;
objList.forEach(e -> transform(e, e.getUuid()));
return objList;

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有