我有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个嵌套循环中匹配它们?
答案 0 :(得分:1)
您可以在java-8中用一个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的情况下完成此操作。