Фильтрация коллекции с объектами, содержащими поля с одинаковыми значениями
Приходит коллекция List<Myclass> mylist;
MyClass содержит различные поля в том числе int id.
Мне нужно оставить в mylist только те экземпляры Myclass которые имеют одинаковые поля id.
Т.е. например пришла коллекция с 10 экземплярами. в ней есть id: 0,0,2,3,4,5,6,7,9,9.
Должна остаться коллекция с 4 экземплярами Myclass с id 0, 0, 9, 9
Я пытался сделать так:
mylist.removeAll(mylist.stream()
.collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingInt(Myclass ::getId))),
ArrayList::new)));
но не проходит.
Ответы (1 шт):
Автор решения: am233dmg
→ Ссылка
List<Myclass> resultList = myList.stream()
.collect(Collectors.groupingBy(Myclass::getId))
.values().stream()
.filter(n -> n.size() > 1)
.flatMap(Collection::stream)
.collect(Collectors.toList());