我有以下 POJO:public class Order { private String name; private String status; private BigDecimal total; // getters, setters and ctors down here}我正在遍历 aList<Order>并尝试将其所有status字段更新为"ORDERED". 这样做的旧(pre Streaming API)方法是:for (Order order : orders) { order.setStatus("ORDERED");}我正在尝试找出完成同一件事的 Java 8(“流”)方式。迄今为止我最好的尝试:orders.stream().map(order -> order.setStatus("H"));产生编译器错误:“不兼容的类型。必需的列表,但‘映射’被推断为流:不存在类型变量 R 的实例,因此流符合列表”有什么想法我会出错吗?
2 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
您不想使用,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"));
添加回答
举报
0/150
提交
取消