匹配嵌套循环元素

时间:2019-07-09 08:17:45

标签: java lambda

我有2个类似的列表

List<List<A>> list1;
List<List<B>> list2;

这些A和B类具有id字段。

class A{
   String id;
   String name;
}

class B{
   String id;
}

我可以匹配这些元素并在4个嵌套循环中操作B实例 name 字段

for(List<A> l1: list1){
   for(A a : l1){
      for(List<B> l2: list2){
         for(B b : l2){
            if(b.id.equals(a.id))
               b.name = "X";
         }
      }
   }
}

但是我试图找到更明智的解决方案。 有什么办法可以在2个嵌套循环中匹配它们?

2 个答案:

答案 0 :(得分:1)

您可以在中用一个Stream来完成

list1.stream()
     .flatMap(List::stream)
     .map(A::getId)
     .distinct()
     .forEach(id -> list2.forEach(bList -> bList.forEach(b -> { if (b.id.equals(id)) b.name = "X";  })));

答案 1 :(得分:0)

您可以使用Java 8流API。

首先将所有 A 对象的ID收集到Set或Map中(如果要访问该对象),然后检查Set / Map中是否存在每个B对象。

Set<Integer> idSet = list1.stream().flatMap(aList -> aList.stream()).map(A::id).collect(Collectors.toSet());

然后

for(List<B> l2: list2){
     for(B b : l2){
        if(idSet.contains(b.id))
           b.name = "X";
     }
 }

通过为list1运行两个循环,也可以在不使用流API的情况下完成此操作。