java8流加载与去重
public static void main(String[] args) {
final ArrayList<String> strings = new ArrayList<>();
strings.add("1");
strings.add("1");
final Stream<String> stringStream = strings.stream().filter(e -> lazyExcuteForEach(e)).filter(eagerExcuteOnlyOnce());
stringStream.collect(Collectors.toList());
}
private static <T> Predicate<T> distinctByKey1(Function<? super T, Object> keyExtractor) { //所以可以理解这个是可以用来去重的. 不会有多个map
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>();
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
private static Predicate<? super String> eagerExcuteOnlyOnce() {
System.out.println("立即且只执行一次, 线程安全");
return t -> false;
}
private static boolean lazyExcuteForEach(final String e) {
System.out.println("懒加载 作为钩子, 等待流收集操作符来回调, 一般每个元素遍历会调一次");
return false;
}