Java对集合进行操作,赋值新字段
1、方法一:增强for循环
List<Refund> list = refundService.selectRefundList(queryParam);
for (Refund refund : list) {refund.setPayWay(refund.getPaymentMethod()); // 将支付方式赋值给付款方式
}
在 Java 中,当你使用
for
循环遍历List<Refund>
时,refund
变量实际上是List
中每个Refund
对象的引用。所以,当你调用refund.setPayWay()
时,实际上是修改了列表中对应元素的payWay
字段。
在这个循环中,refund
是 list
中的每一个 Refund
对象的引用。所以,setPayWay()
会直接修改该对象的状态,而这个对象是在 list
中的。因此,不需要再特别处理存储问题。
对象没有更新:可能与get、set方法有关
2、方法二:stream流、forEach
import java.util.List;List<Refund> list = refundService.selectRefundList(queryParam);// 使用 Stream 来遍历并更新 payWay 字段
list.stream().forEach(refund -> refund.setPayWay(refund.getPaymentMethod())); // 将支付方式赋值给付款方式// 返回更新后的 list
return ResponseEntity.ok(list); // 确保这里返回的是更新后的 list
list.stream()
: 将List<Refund>
转换成Stream<Refund>
,这样你就可以使用流式的操作来处理它。
forEach(refund -> refund.setPayWay(refund.getPaymentMethod()))
: 对Stream
中的每个元素(即每个Refund
对象)执行setPayWay
操作。这里refund
是Stream
中的每个元素。返回
list
: 处理完成后,你可以将更新后的list
返回。
3、方法三: stream流、map
List<Refund> updatedList = list.stream().map(refund -> {refund.setPayWay(refund.getPaymentMethod()); // 设置付款方式return refund; // 返回更新后的 Refund 对象}).collect(Collectors.toList()); // 收集到一个新的 List// 返回更新后的 list return ResponseEntity.ok(updatedList);
主要区别
forEach
: 会直接在原列表上修改对象(没有创建新的列表)。
map
+collect
: 创建一个新的列表,并将每个更新后的对象添加到新列表中。性能和使用场景
如果你只是想更新原有的对象(修改
Refund
对象的字段),直接使用forEach
是一个比较简单的选择。如果你需要返回一个新的列表,并且不想修改原列表(或者需要保留原列表),可以选择使用
map
和collect
。这两种方式都能有效地替代传统的
for
循环。如果你有其他的流式操作需求,Stream
提供了丰富的功能(如过滤、排序、映射等),使得代码更加简洁且具有更好的可维护性。