有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java流API更新POJO列表的集合

我有以下几点建议:

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

  // getters, setters and ctors down here

}

我在一个List<Order>中循环,并试图将它们的所有status字段更新为"ORDERED"的值。执行此操作的(预流式API)方法是:

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

我正试图找出Java8(“流”)实现同样事情的方法。我迄今为止最好的尝试是:

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

生成编译器错误:

"Incompatible types. Required List but 'map' was inferred to Stream: no instance(s) of type variable(s) R exist so that Stream conforms to List"

知道我哪里出错了吗


共 (2) 个答案

  1. # 1 楼答案

    使用forEach

    orders.forEach(order -> order.setStatus("H"));
    
  2. # 2 楼答案

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

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

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

    如果只想更新列表中的某些值,可以在以下操作之前使用Stream.filter()

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