Фильтрация коллекции с объектами, содержащими поля с одинаковыми значениями

Приходит коллекция 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());
→ Ссылка