使用lambad表达式对数据进行分组

这篇博客详细介绍了如何使用Java8的Stream API进行数据分组和聚合操作,包括单条件分组、统计数量、计算平均值、求和、排序、转换为Set以及双条件分组等实例,展示了在实际开发中处理数据的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        //单条件分组,
        Map<String, List<YourBean>> mapByOne = yourBeanList.stream().collect(Collectors.groupingBy(YourBean::getBillDateStr));
 
        //分组后,统计每组中数据量
        Map<String, Long> count = yourBeanList.stream().collect(Collectors.groupingBy(YourBean::getBillDateStr, Collectors.counting()));
 
        //分组后,求出每组中某属性的平均值
        Map<String, Double> avg = yourBeanList.stream().filter(i -> i.getGoodAmount() != null).
		collect(Collectors.groupingBy(YourBean::getBillDateStr, Collectors.averagingDouble(YourBean::getGoodAmount)));
 
        //分组,某属性求和
        Map<String, Double> sum = yourBeanList.stream().filter(i -> i.getGoodAmount() != null).
                collect(Collectors.groupingBy(YourBean::getBillDateStr, Collectors.summingDouble(YourBean::getGoodAmount)));
 
        //对求和的结果集进行从大到小排序
        Map<String, Double> finalMap = new LinkedHashMap<>();
        sum.entrySet().stream().sorted(Map.Entry.<String, Double>comparingByValue().reversed()).forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue()));
 
        //分组后,通过join组成新的map
        Map<String, String> joinNewMap = yourBeanList.stream().filter(i -> i.getGoodAmount() != null)
                .collect(Collectors.groupingBy(YourBean::getBillDateStr,
                        Collectors.mapping(i -> i.getGoodAmount().toString(), Collectors.joining(", ", "Post titles: [", "]"))));
        //2020-03-10
        //Post titles: [3.0, 1.0, 2.0, 3.0]
 
        //转换分组结果List -> Set
        Map<String, Set<String>> namesByName = yourBeanList.stream()
				.collect(Collectors.groupingBy(YourBean::getBillDateStr, Collectors.mapping(YourBean::getGoodName, Collectors.toSet())));
        Set<String> x = namesByCity.keySet();
 
        //两个条件分组
        Map<String, Map<String, List<YourBean>>> mapByTwo = yourBeanList.stream()
                .collect(Collectors.groupingBy(YourBean::getBillDateStr, Collectors.groupingBy(YourBean::getGoodName)));
 
        //使用java8 stream groupingBy操作,按日期分组list,将List转化为name的List
        Map<String, List<String>> mapList = yourBeanList.stream()
                .collect(Collectors.groupingBy(YourBean::getBillDateStr, Collectors.mapping(YourBean::getGoodName, Collectors.toList())));

//对分组的数据进行非空过滤
Map<Integer, List<AdvancedStudyConfig>> mapByOne = advancedStudyConfigList.stream().filter(c -> c.getType() != null).collect(Collectors.groupingBy(AdvancedStudyConfig::getType));

使用lambad表达式对数据进行分组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值