使用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"
知道我哪里出错了吗强>
# 1 楼答案
使用
forEach
:# 2 楼答案
您不想使用
Stream.map()
,因为它需要一个返回值来替换流中的原始值。您的流中还缺少一个终端操作,因此即使您通过返回原始值来修复它,它也不会工作Stream.forEach()
是一种终端操作,可以用于此操作要更新列表中的每个对象,只需使用
orders.forEach()
。这与orders.stream().forEach()
相同如果只想更新列表中的某些值,可以在以下操作之前使用
Stream.filter()
: