Я пытаюсь найти отдельные дубликаты и не дубликаты в List
, добавляя их к Set
и List
при использовании Stream.filter
и Stream.map
List<String> strings = Arrays.asList("foo", "bar", "foo", "baz", "foo", "bar");
Set<String> distinct = new HashSet<>();
List<String> extras = new ArrayList<>();
strings
.stream()
.filter(x -> !distinct.add(x))
.map(extra -> extras.add(extra));
В конце я ожидаю, что distinct
будет [foo, bar, baz]
и extras
будет [foo, foo, bar]
, поскольку есть 2 дополнительных экземпляра foo
и 1 из bar
. Однако после запуска они оба пусты.
Лямбды, передаваемые потоку, никогда не вызываются, что я проверил, пытаясь напечатать внутри не работает, когда я пытаюсь использовать put
с Map
. Что я делаю не так?
Примечание. Могут быть и другие вопросы, похожие на этот, но я ищу своего рода канонический ответ, почему такого рода вещи не работают с потоками Java 8. Если вы можете сделать этот вопрос более общим (даже если это означает его полное изменение), я был бы признателен.