如何比较不同类型的列表

时间:2019-06-19 13:52:50

标签: java arraylist collections hashmap

我有两个列表。一个列表包含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);

请帮助!

3 个答案:

答案 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);