繁体   English   中英

使用Java Stream API更新POJO列表

[英]Updating list of POJOs using Java Stream API

我有以下POJO:

public class Order {
  private String name;
  private String status;
  private BigDecimal total;

  // getters, setters and ctors down here

}

我循环遍历List<Order>并尝试将其所有status字段更新为"ORDERED"值。 旧的 (pre Streaming API)方法是:

for (Order order : orders) {
  order.setStatus("ORDERED");
}

我试图弄清楚Java 8(“Streaming”)完成同样事情的方式。 迄今为止我最好的尝试:

orders.stream().map(order -> order.setStatus("H"));

产生编译错误:

不兼容的类型。必需的列表,但'map'被推断为Stream:没有类型变量R的实例存在,以便Stream符合List

我出错的任何想法?

使用forEach

orders.forEach(order -> order.setStatus("H"));

您不想使用Stream.map()因为它需要一个返回值来替换流中的原始值。 您还缺少流中的终端操作,因此即使您通过返回原始值来修复它也无法正常工作。 Stream.forEach()是一个可用于此的终端操作。

要更新列表中的每个对象,只需使用orders.forEach() 这与orders.stream().forEach()

orders.forEach(o -> o.setStatus("H"));

如果您只想更新List的某些值,可以在之前使用Stream.filter()

orders.stream()
        .filter(o -> "ABC".equals(o.getName())
        .forEach(o -> o.setStatus("H"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM