java8流加载与去重

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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值