Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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流API更新POJO列表_Java_Collections_Java 8_Java Stream - Fatal编程技术网

使用Java流API更新POJO列表

使用Java流API更新POJO列表,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,我有以下几点建议: public class Order { private String name; private String status; private BigDecimal total; // getters, setters and ctors down here } 我正在循环浏览一个列表,并尝试将其所有状态字段更新为“有序的”。旧的(预流式API)方法是: for (Order order : orders) { order.setStatus("O

我有以下几点建议:

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

  // getters, setters and ctors down here

}
我正在循环浏览一个
列表
,并尝试将其所有
状态
字段更新为
“有序的”
。旧的(预流式API)方法是:

for (Order order : orders) {
  order.setStatus("ORDERED");
}
我正试图找出Java8(“流”)实现同样事情的方法。我迄今为止最好的尝试是:

orders.stream().map(order -> order.setStatus("H"));
生成编译器错误:

“不兼容的类型。需要列表,但已将“映射”推断为流:不存在类型变量R的实例,因此流符合列表”


我有什么想法吗?使用
forEach

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

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

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

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

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

流式传输集合时,不要使用流来更改对象。您希望对每个元素执行一个操作,那么是什么促使您决定尝试
map
,而不是其中一个,例如
forEach
orders.stream()
        .filter(o -> "ABC".equals(o.getName())
        .forEach(o -> o.setStatus("H"));