【Java8新特性】groupingBy分组

一、业务需求:

需要对查询到的List集合,按照时间分组完毕后,在根据身份证分组

二、groupingBy

Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组

JSONArray orgArray = JSON.parseArray(string);
List<Insurce> insurceList = new ArrayList<>();
if(orgArray.size() > 0){
    for (int i = 0; i < orgArray.size(); i++) {
        Insurce insurce = JSON.parseObject(orgArray.get(i).toString(),Insurce.class);
        insurceList.add(insurce);
    }
}
//insurceList ---待排序数据源
//将insurceList按照月份、身份证号多个属性分组(多层分组)
Map<String, Map<String, List<Insurce>>> collect = insurceList.stream().collect(Collectors.groupingBy(Insurce::getYf, Collectors.groupingBy(Insurce::getSfzhm)));
System.out.println(collect);

//如果只按照月份进行分组
Map<String,List<Insurce>> collect = insurceList.stream().collect(Collectors.groupingBy(Insurce::getYf));
System.out.println(collect);

(还有按属性拼接分组、手动写条件进行分组等等)参考链接:https://blog.csdn.net/weixin_40482816/article/details/115379695

Java 8 引入了一些有用的新特性,其中包括分组。下面是一些 Java 8 中可用的分组方法: 1. groupingBy():将一个流分组为一个Map对象。 2. partitioningBy():将一个流分组为一个Map对象,其中键是true或false,取决于元素是否满足给定的条件。 3. toList():将一个流分组为一个列表。 4. toSet():将一个流分组为一个集合。 5. toCollection():将一个流分组为一个指定类型的集合。 下面是一个示例代码: ```java import java.util.*; import java.util.stream.Collectors; public class GroupByDemo { public static void main(String[] args) { // 创建一个列表 List<String> list = Arrays.asList("apple", "banana", "orange", "pear", "grape"); // 使用 groupingBy() 方法对列表进行分组 Map<Integer, List<String>> map = list.stream().collect(Collectors.groupingBy(String::length)); // 打印分组结果 System.out.println(map); // 使用 partitioningBy() 方法对列表进行分组 Map<Boolean, List<String>> map2 = list.stream().collect(Collectors.partitioningBy(s -> s.startsWith("a"))); // 打印分组结果 System.out.println(map2); } } ``` 输出结果如下: ``` {3=[pear], 5=[apple, grape], 6=[orange], 6=[banana]} {false=[banana, orange, pear, grape], true=[apple]} ``` 这个示例演示了如何使用 `groupingBy()` 方法将一个列表分组为一个Map对象,其中键是字符串的长度。此外,还演示了如何使用 `partitioningBy()` 方法将一个列表分组为一个Map对象,其中键是true或false,取决于元素是否以字母"a"开头。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值