java - 使用java流迭代2个列表时修改对象
问题描述
List<Account> list1 = new ArrayList<>();
List<Order> list2 = new ArrayList<>();
list1.stream().forEach(l1 -> list2.stream()
.forEach(l2 -> {
if (l1.getOrderId() == l2.getOrderId())
l1.setStatus(l2.getStatus());
}));
我是这样做的。它工作正常,但现在我有另一种情况,如果 list2 中不存在 orderId,则将该特定 l1 的状态设置为“无效”。OrderId 在两个表中都是唯一的。希望这能提供更好的理解。
解决方案
编辑感谢您对问题的编辑,现在它更有意义了。我认为这应该做你所追求的:
list1.forEach(acc -> acc.setStatus(list2.stream()
.filter(o -> o.getOrderId() == acc.getOrderId())
.findAny()
.map(Order::getStatus)
.orElse("invalid")));
我正在使用Iterable.forEach()
and then Collection.stream()
andOptional.map()
来计算要设置的状态的功能方法。
推荐阅读
- javascript - 使用 Javascipt 更改类
- sas - 需要一起设置未知数量的数据集
- java - Jackson - 动态添加枚举值时,EnumValues 序列化失败
- mysql - MariaDB:差异“INNER JOIN ... USING”和“INNER JOIN ... ON”
- python - Python - 有效地连接压缩文件
- django - Ajax 触发请求不更新 Django 视图
- python - 如何将具有一个数据框/行的列拆分为多行(熊猫)?
- isabelle - 在 Isabelle 中使用重写库
- java - 为什么我们可以在 Optional.of() 上调用 .orElse()?
- go - *golang 中的布尔值