猿问

使用 Java Stream API 更新 POJO 列表

我有以下 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 的实例,因此流符合列表”


有什么想法我会出错吗?


一只萌萌小番薯
浏览 135回答 2
2回答

DIEA

使用forEach:orders.forEach(order&nbsp;->&nbsp;order.setStatus("H"));

慕桂英4014372

您不想使用,Stream.map()因为它需要一个返回值来替换流中的原始值。您还缺少流中的终端操作,因此即使您通过返回原始值来修复它也不会起作用。Stream.forEach()是您可以用于此的终端操作。要更新列表中的每个对象,您只需使用orders.forEach().&nbsp;这与orders.stream().forEach().orders.forEach(o&nbsp;->&nbsp;o.setStatus("H"));如果您只想更新列表的某些值,您可以使用Stream.filter()之前:orders.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(o&nbsp;->&nbsp;"ABC".equals(o.getName()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(o&nbsp;->&nbsp;o.setStatus("H"));
随时随地看视频慕课网APP

相关分类

Java
我要回答