首页 > 解决方案 > 嵌套 For 循环的更好方法

问题描述

我只是想检查一下是否有更好的方法来执行此嵌套 for 循环。下面是代码:

   if(order){
        outer: for (Object item : list) {
            if (item.detail() == 1) {
                for (Object2 item2 : list2) {
                    if(item2.getOrderNbr() == item.getOrderNbr()) {
                        //non-related
                        break outer;
                    }
            }
        }
    }

总结一下我正在尝试做的事情。我有两个列表,第一个列表有一个类似对象的列表,但有一个额外的字段告诉我订单是否在某个位置。如果是,它会转到第二个列表并尝试根据订单号在该列表中找到相应的对象,因为订单号将匹配。第二个列表没有属性告诉我它是否在某个位置,所以我必须使用两个列表。

标签: java

解决方案


由于您secondList一直在根据进行检查orderNbr,因此最好创建一个Map并使用它来更快地检索。

我假设您的第二个列表包含为Order易于理解而命名的类

你可以试试这个:

Map<Integer, Order> orderMap = new HashMap<>();
list2.stream().collect(Collectors.groupingBy(Order::getOrderNbr));

list1
    .stream()
    .filter(f -> f.getDetail() == 1)
    .map(First::getOrderNbr)
    .forEach(orderNo -> {
        Order order = orderMap.get(orderNo);
        // your-code
    });

注意:list1此代码还支持在同一地点的多个订单。


推荐阅读