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

新手上路,请多包涵

假设我有一个 void 方法,它只对对象进行转换,不返回任何值,我想在流 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);
}

该示例是为简单起见而编造的——实际方法是在做其他事情,而不仅仅是混淆对象的 UUID。

无论如何,在上述情况下怎么可能使用 void 方法?当然,我可以让该方法返回转换后的对象,但这不是重点并且违反了设计(该方法应该是无效的)。

原文由 Nestor Milyaev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
2 个回答

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

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

原文由 Murat Karagöz 发布,翻译遵循 CC BY-SA 3.0 许可协议

除了 Eugene 的回答 之外,您还可以像这样使用 Stream::map

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

实际上,您不想转换当前元素并将其收集到新的 List 中。

相反,您想为 List 中的每个条目应用一个方法。

因此,您应该使用 Collection::forEach 并返回 List

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

原文由 Flown 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题