Другое решение - использовать предикат, тогда вы можете использовать его в любом фильтре:
public static <T> Predicate<T> distinctBy(Function<? super T, ?> f) {
Set<Object> objects = new ConcurrentHashSet<>();
return t -> objects.add(f.apply(t));
}
Затем просто используйте предикат где угодно:
employees.stream().filter(distinctBy(e -> e.getId));
Примечание: в JavaDoc фильтра, в котором говорится, что он принимает безгражданный Predicte. На самом деле это прекрасно работает, даже если поток параллелен.
О других решениях:
1) Использование .collect(Collectors.toConcurrentMap(..)).values()
- хорошее решение, но это раздражает, если вы хотите сортировать и сохранить порядок.
2) stream.removeIf(e->!seen.add(e.getID()));
также является еще одним очень хорошим решением. Но мы должны убедиться, что коллекция реализована removeIf, например, она будет генерировать исключение, если мы построим использование коллекции Arrays.asList(..)
.
Я нашел решение этой проблемы! ... Я сделал щелчок на «Reference ...» в VBA Developer в Excel, и я получил это сообщение: Unrecognized Project Language, затем я перешел в региональную настройку, и я очистил (снял) бета-версию: используйте Unicode UTF- 8 ... Теперь VBA работает правильно.