collectingAndThen​

2collectingAndThen

static <T,​A,​R,​RR> Collector<T,​A,​RR> collectingAndThen​(Collector<T,​A,​R> downstream, Function<R,​RR> finisher)

根据函数名称可以简单理解为先collect然后再对其结果进行后续操作。

在上面的averagingInt函数的使用方法示例中由于collect得出的结果为Double类型,因此最后我们还需要进行intValue转换为int类型,如果我们使用collectingAndThen可以把上面的示例改造为:

void test18() {

        List<String> list = List.of("1","2","3","4","100");

        //int avg = list.stream().collect(Collectors.averagingInt(Integer::parseInt)).intValue();

        int avg = list.stream().collect(Collectors.collectingAndThen(Collectors.averagingInt(Integer::parseInt), a -> a.intValue()));

        System.out.println(avg);

    }

从这个示例我们就可以很明了的看到collectingAndThen函数的作用,这个例子看起来比直接用averagingInt函数复杂了些,好像没有什么优势,其实collectingAndThen函数大多是用在对结果集的排序之类的操作上,这样就可以显现collectingAndThen函数的优势。

看下面这个例子:

void test19() {

        List<String> list = List.of("7m","6j","9k","4y","5l","3o","8j");

        ArrayList ts = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(a -> a.charAt(0)))), ArrayList::new));

        System.out.println(ts.toString());

    }

这个例子的作用就是对list中的元素按首字母大小排序,把排序结果以ArrayList类型输出。输出结果如下:

[3o, 4y, 5l, 6j, 7m, 8j, 9k]

 

上面这个例子就能发挥出collectingAndThen的威力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值