【发布时间】:2020-07-24 23:49:15
【问题描述】:
我想在这里了解过滤流的工作原理。
以下是从List 的Strings 中过滤掉重复项的两种方法。
(我不想使用 distinct 关键字进行演示)
List<String> list = new ArrayList(){{add("abc");add("abc");add("abcd");}};
List<String> list1 = list.parallelStream().filter(e->{
Set<String> seen = ConcurrentHashMap.newKeySet();
return seen.add(e.getLastName());
}).collect(Collectors.toList());
上述方法似乎不起作用,因为每次都在创建 Set 的新实例。
List<String> list2 =
list.parallelStream().filter(distincyByKey(e>e.getLastName())).collect(Collectors.toList());
public static <T> Predicate<T> distincyByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
System.out.println("testttttttttttt");
return t -> seen.add(keyExtractor.apply(t));
}
这种方法似乎奏效了。不知道方法 1 和 2 有什么区别。我看到 distincyByKey 是一个静态方法,但它有什么区别?
【问题讨论】:
标签: lambda java-8 functional-programming java-stream