我有以下POJO:
public class Order {
private String name;
private String status;
private BigDecimal total;
// getters, setters and ctors down here
}
我正在遍历List<Order>
,并尝试将其所有status
字段更新为值"ORDERED"
。 old (预流式API)的实现方式是:
for (Order order : orders) {
order.setStatus("ORDERED");
}
我正在尝试找出完成同一件事的Java 8(“流”)方式。迄今为止我最大的尝试:
orders.stream().map(order -> order.setStatus("H"));
产生编译器错误:
“ 不兼容的类型。必需列表,但将'map'推断为Stream:不存在类型变量R的实例,因此Stream符合List ”
有什么想法我要去哪里吗?
答案 0 :(得分:3)
使用forEach
:
orders.forEach(order -> order.setStatus("H"));
答案 1 :(得分:0)
您不想使用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"));