Как сравнить списки разных типов - PullRequest
0 голосов
/ 19 июня 2019

У меня есть два списка.В одном списке 6 элементов, в другом 3 элемента.Мне нужно сравнить оба списка и сохранить только ту информацию в aList, которая соответствует bList.

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 ]

1 голос
/ 19 июня 2019

По сути, идея состоит в том, чтобы сравнить каждый элемент aList с каждым элементом bList при сравнении sc_id == e.cid.Вы можете использовать потоки для этого.Похоже на это

aList = aList.stream().filter(e -> bList.stream().anyMatch(b -> b.sc_id == e.cid)).collect(Collectors.toList());
0 голосов
/ 19 июня 2019

Сначала получите идентификаторы, которые хотите сохранить, а затем отфильтруйте их.

Set<Integer> keepIds = bList.stream().map(BClass:getId).collect(toSet());
List<AClass> filtered = aList.stream
                             .filter(a -> keepIds.contains(a.getId()))
                             .collect(toList());
0 голосов
/ 19 июня 2019
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);
...