3 回答

TA貢獻1809條經(jīng)驗 獲得超8個贊
在下面測試了Stuart的功能,它看起來很棒。下面的操作在每個字符串的第一個字母上有所區(qū)別。我要弄清楚的唯一部分是ConcurrentHashMap如何僅維護整個流的一個實例
public class DistinctByKey {
public static <T> Predicate<T> distinctByKey(Function<? super T,Object> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
public static void main(String[] args) {
final ImmutableList<String> arpts = ImmutableList.of("ABQ","ALB","CHI","CUN","PHX","PUJ","BWI");
arpts.stream().filter(distinctByKey(f -> f.substring(0,1))).forEach(s -> System.out.println(s));
}
輸出是...
ABQ
CHI
PHX
BWI

TA貢獻1811條經(jīng)驗 獲得超5個贊
您或多或少必須要做類似的事情
elements.stream()
.collect(Collectors.toMap(
obj -> extractKey(obj),
obj -> obj,
(first, second) -> first
// pick the first if multiple values have the same key
)).values().stream();
添加回答
舉報