![](/img/trans.png)
[英]How to merge two list of POJOS using stream JAVA 8 modifying some values when necessary
[英]Updating list of POJOs using Java Stream API
我有以下POJO:
public class Order {
private String name;
private String status;
private BigDecimal total;
// getters, setters and ctors down here
}
我循环遍历List<Order>
并尝试将其所有status
字段更新为"ORDERED"
值。 旧的 (pre Streaming API)方法是:
for (Order order : orders) {
order.setStatus("ORDERED");
}
我试图弄清楚Java 8(“Streaming”)完成同样事情的方式。 迄今为止我最好的尝试:
orders.stream().map(order -> order.setStatus("H"));
产生编译错误:
“ 不兼容的类型。必需的列表,但'map'被推断为Stream:没有类型变量R的实例存在,以便Stream符合List ”
我出错的任何想法?
使用forEach
:
orders.forEach(order -> order.setStatus("H"));
您不想使用Stream.map()
因为它需要一个返回值来替换流中的原始值。 您还缺少流中的终端操作,因此即使您通过返回原始值来修复它也无法正常工作。 Stream.forEach()
是一个可用于此的终端操作。
要更新列表中的每个对象,只需使用orders.forEach()
。 这与orders.stream().forEach()
。
orders.forEach(o -> o.setStatus("H"));
如果您只想更新List的某些值,可以在之前使用Stream.filter()
:
orders.stream()
.filter(o -> "ABC".equals(o.getName())
.forEach(o -> o.setStatus("H"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.