考虑
distinct做一个有状态过滤器。这是一个函数,该函数返回一个谓词,该谓词保持先前状态的状态,并返回是否第一次看到给定元素:
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t));}然后你可以编写:
persons.stream().filter(distinctByKey(Person::getName))
请注意,如果流是有序的并并行运行,则它将保留重复项中的任意元素,而不是第一个重复元素
distinct()。



