我有两个列表。一个列表包含6个元素,另一个包含3个元素。我需要比较两个列表,并只在与bList匹配的aList中保留该信息。
public class AClass{
String cname;
int cid;
int aid;
}
public class BClass{
String cname;
int sc_id;
int aid;
}
还有两个列表:
List<AClass> aList;
List<BClass> bList;
例如,aList具有1,2,3,4,5,6,bList具有1,4,5。必须进行比较,以便aList包含1,4,5。
我尝试了以下代码。但是不起作用。
aList.retainAll(bList);
请帮助!
答案 0 :(得分:1)
基本上,这个想法是在比较aList
的同时将bList
的每个元素与sc_id == e.cid
的每个元素进行比较。您可以为此使用流。看起来像这样
aList = aList.stream().filter(e -> bList.stream().anyMatch(b -> b.sc_id == e.cid)).collect(Collectors.toList());
答案 1 :(得分:0)
首先获取要保留的ID,然后对它们进行过滤。
Set<Integer> keepIds = bList.stream().map(BClass:getId).collect(toSet());
List<AClass> filtered = aList.stream
.filter(a -> keepIds.contains(a.getId()))
.collect(toList());
答案 2 :(得分:-1)
List<Integer> a = List.of(1,2,3,4,5);
List<Integer> b = List.of(1,4,6);
List<Integer> collect = a.stream().filter(b::contains).collect(Collectors.toList());
System.out.println(collect);