使用Stream收集数据

本文介绍了Java Stream的收集操作,包括规约和汇总、单级和多级分组、分区,以及如何自定义收集器以提高性能。通过示例展示了如何按照Dish的type分组、菜品价格进行分区,并对比了自定义收集器与分区在处理大数据量时的性能差异。
摘要由CSDN通过智能技术生成


前言

collect 是一个归约操作,就像 reduce 一样可以接受各种做法作为参数,将流中的元素累积成一个汇总结果。具体的做法是通过定义新的Collector 接口来定义的。

一、使用方法

1.规约和汇总

public static void collectTest(){
   
        List<Integer> numbers = Arrays.asList(1,2,3,4,5);
        System.out.println(numbers.stream().count());//元素个数
        Map<Boolean, List<Integer>> collect = numbers.stream().collect(groupingBy(i -> i % 2 == 0));//以奇偶数分组
        System.out.println(collect.get(true));
        System.out.println(numbers.stream().collect(maxBy(Comparator.comparingInt(i->i))));//最大值
        System.out.println(numbers.stream().collect(summingInt(i->i)));//和
        System.out.println(numbers.stream().collect(summarizingInt(i->i)));//一劳永逸,常用汇总数据
        System.out.println(numbers.stream().map(i->i+"").collect(joining(",")));//连接字符串,并设置分隔符
    }
5
[2, 4]
Optional[5]
15
IntSummaryStatistics{count=5, sum=15, min=1, average=3.000000, max=5}
1,2,3,4,5

2.分组

  1. 单级分组

按照一个属性对集合中的项目进行分组

实战:按照Dish的type进行分组

public class Dish {
   
    String type;
    String name;
    int costs;
}
public static void groupTest() {
   
        List<Dish> dishes=Arrays.asList(new Dish("fish","prawns",200),
                new Dish("fish","salmon",200),
                new Dish("meat","pock",20),
                new Dish("meat","beef",30),
                new Dish("meat","chicken",400),
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值