首页 > 解决方案 > 使用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 在两个表中都是唯一的。希望这能提供更好的理解。

标签: javajava-stream

解决方案


编辑感谢您对问题的编辑,现在它更有意义了。我认为这应该做你所追求的:

    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()来计算要设置的状态的功能方法。


推荐阅读