首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8新特性——StreamAPI(二)

收集器简介 收集器用来将经过筛选、映射的流进行最后的整理,可以使得最后的结果以不同的形式展现。 collect方法即为收集器,它接收Collector接口的实现作为具体收集器的收集方法。...2.1.1 计数 long count = list.stream() .collect(Collectors.counting()); 也可以不使用收集器的计数函数...Collectors.reducing方法还提供了一个单参数的重载形式。 你只需传一个归约的操作过程给该方法即可(即第三个参数),其他两个参数均使用默认值。...2.2.2 多级分组 多级分组可以支持在完成一次分组后,分别对每个小组再进行分组。 使用具有两个参数的groupingby重载方法即可实现多级分组。...此外,partitioningBy方法和groupingBy方法一样,也可以接收第二个参数,实现二级分区或对分区结果进行统计。

98850
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 8 - 收集器Collectors_分组groupingBy

    Map> collect = menu.stream().collect(groupingBy(Dish::getType)); 用 Collectors.groupingBy...要实现多级分组,我们可以使用一个由双参数版本的 Collectors.groupingBy 工厂方法创建的收集器,它除了普通的分类函数之外,还可以接受 collector 类型的第二个参数。...最后,第二级 map 的值是流中元素构成的 List ,是分别应用第一级和第二级分类函数所得到的对应第一级和第二级键的值:“salmon、pizza…” 这种多级分组操作可以扩展至任意层级,n级分组就会得到一个代表...::getCalories))); 返回 {MEAT=1900, FISH=750, OTHER=1550} 然而常常和 groupingBy 联合使用的另一个收集器是 mapping 方法生成的。...方法的转换函数将 Dish 映射成了它的CaloricLevel :生成的 CaloricLevel 流传递给一个 toSet 收集器,它和 toList 类似,不过是把流中的元素映射到一个 Set 而不是

    4.3K41

    java8-Stream Api流详解

    skip(n)跳过操作,跳过前n个元素的流,如果元素为空,则返回一个空流。 3.2.2 映射 map(T->R)映射操作,将流中的每一个元素映射成一个新元素,转换成另一个对象。...")); System.out.println(collect5); 4.2 reducing也能做这些事儿 除了使用现成的一些收集器方法之外,Collectors.reducing也能做到归约和汇总...System.out.println(collect11); 还可以实现多级分组,通过groupingBy中的另一个参数可以选择二级分组的规则,并且最终会嵌套在一级分组之内 final Map<Book.Type...); partitioningBy同样也可以和groupingBy配合一起使用,通过groupingBy收集器会在Boolean作为key的Map中继续生成一个二级map //{false={MATH=...(toList(),List::size)); 转换函数返回的类型 包裹另一个收集器,对其结果应用转换函数 groupingBy使用示例:Map> BookesByType = menuStream.collect

    64310

    java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)

    实战读书笔记:数值流、Stream创建与Optional类的使用 java8读书笔记:探究java8流收集数据原理 本文将从Collectos中构建收集器入手,详细介绍java8提供了哪些收集器,重点介绍...:toList、toSet、toCollection、joining、groupBy(包含多级分组)、reducing的核心实现原理与使用示例。...= menu.stream().map(Dish::getName) 3 .collect(Collectors.toList()); 4} 由于toList...groupingBy的原理就讲解到这里,我们接下来思考如下场景: 还是上面的购物车场景,现在要求先按照供应商名称分组,然后按照购买人分组(即多级分组),类似于SQL group by sellerId,...关于Collectors.reducing,建议可以直接使用Stream自身提供的reducing方法,具体请参考博文:java8实战读书笔记:初识Stream、流的基本操作(流计算)

    9.4K41

    Java Lambda表达式:让groupingBy()带你继续飞

    如果你发现自己一直都是这样使用 groupingBy()收集器: .collect(groupingBy(...)); 或者,如果你只是想看看 groupingBy()还有什么神乎其技的用法,那么这篇文章就是为你准备的...分组和计算各组的和 如果你想对集合内的元素求和,这里也有一些可用的收集器: summingInt() summingLong() summingDouble() 这些收集器的使用示例如下所示: List...分组和归约 如果您想对分组的元素执行归约操作,可以使用 reducing()收集器: groupingBy(List::size, reducing(List.of(), (l1, l2) -> ......> result = strings.stream() .map(toStringList()) .collect(groupingBy(List::size, reducing...不过,我们可以使用 reducing()收集器来实现要想的功能。 组合下游收集器 一旦我们开始组合多个收集器来定义复杂的下游分组操作,就可以发挥收集器的全部能力了。

    2.2K10

    Java8 Stream 中 Collectors 的24个操作

    比如,求这几个人的体重平均值,因为体重是Double类型,所以在不转换类型的情况下,需要使用averagingDouble :people.stream().collect(Collectors.averagingDouble...比如,得到所有Person的 Id 列表,只需要根据需要的结果类型使用不同的方法即可:people.stream().map(Person::getId).collect(Collectors.toList...分组:partitioningBypartitioningBy与groupingBy的区别在于,partitioningBy借助Predicate断言,可以将集合元素分为true和false两部分。...().map(Person::getWeight).reduce(0.0,Double::sum);// 332.26maxBy和minBy这两个函数就是通过reducing实现的。...mapping和reducing,可以参考map-reduce的概念。很多框架都是用的map-reduce方式进行操作和聚合。七、工作中常用的一些组合操作:1.

    10710
    领券