List集合进行分组

这篇具有很好参考价值的文章主要介绍了List集合进行分组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在开发过程中会经常遇到把一个List集合中的对象按照某个属性进行分组,然后把分组后的结果再另外处理的这种情况。分组的时候如果是比较简单的只需要分一次组,复杂情况时需要进行二次分组,甚至三次分组。我们可以使用Collectors.groupingBy 来提高工作效率。具体分组请看下面代码。

先创建一个Bean对象。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private String name;
    private Integer age;
    private Date birthday;
    private Double ff;
}

 普通的分组方式,可以通过Map的key是唯一的这种特性进行分组。

public static void main(String[] args) throws CloneNotSupportedException {
        // 需求根据name进行分组,key是name, value是List<Student>的集合
        // 数据初始化
        List<Student> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Student student;
            if (i <2) {
                student = new Student("name", i, new Date(), 11.0);
            } else {
                student = new Student("name2", i, new Date(), 11.0);
            }

            list.add(student);
        }
        // 分组方式1
        Map<String, List<Student>> map = new HashMap<>();
        for (Student student : list) {
            if (map.get(student.getName()) == null) {
                List<Student> studentList = new ArrayList<>();
                studentList.add(student);
                map.put(student.getName(), studentList);
            } else {
                map.get(student.getName()).add(student);
            }
        }
    }

使用collections.groupby来简化代码量

public static void main(String[] args) throws CloneNotSupportedException {
        // 需求根据name进行分组,key是name, value是List<Student>的集合
        // 数据初始化
        List<Student> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Student student;
            if (i <2) {
                student = new Student("name", i, new Date(), 11.0);
            } else {
                student = new Student("name2", i, new Date(), 11.0);
            }

            list.add(student);
        }
   
        // 这句分组与分组方式1的效果相同,但是代码量就少了很多,建议用下面的写法,需要java8以上。
        // 分组方式2
        Map<String, List<Student>> collect = list.stream().collect(Collectors.groupingBy(Student::getName));
        
        // 组内再分组,总共是2次分组,适用于先进行第一次分组,然后在第一次分组的基础上再进行一次分组的情况; key: name ,value: Map<ff, List<Student>
        // 先按name进行第一次分组,然后再按ff进行第二次分组;
        Map<String, Map<Double, List<Student>>> collect1 = list.stream().collect(Collectors.groupingBy(Student::getName, Collectors.groupingBy(Student::getFf)));
        System.out.println(collect1);
        Set<Map.Entry<String, Map<Double, List<Student>>>> entries = collect1.entrySet();
        for (Map.Entry<String, Map<Double, List<Student>>> entry : entries) {
            Map<Double, List<Student>> ffMap = entry.getValue();
            Set<Map.Entry<Double, List<Student>>> entries1 = ffMap.entrySet();
            for (Map.Entry<Double, List<Student>> doubleListEntry : entries1) {
                // 这时候的studentList 出来的 name和ff都是同一组的。
                List<Student> studentList = doubleListEntry.getValue();
            }
        }
    }文章来源地址https://www.toymoban.com/news/detail-441913.html

到了这里,关于List集合进行分组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java系列之list集合分组

    在Java编程中,List集合是一种常用的数据结构,用于存储一组元素。有时候,我们需要对List集合中的元素进行分组操作,即将相同属性或特征的元素归类到一组。这种分组操作在数据处理和分析中非常常见,能够帮助我们更好地组织和处理数据。 Java提供了多种实现List接口的

    2024年02月09日
    浏览(47)
  • Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作

    1、正序 2、逆序 3、根据某个属性或多个属性排序 多个属性排序:需要添加排序条件就在后面添加.thenComparing(UserVO::getxxx),它是在上一个条件的基础上进行排序 1、去重 2、根据某个属性去重(它将该字段还进行排序了) 3、根据某个属性去重(这个方法没有排序) 4、对多个

    2024年02月01日
    浏览(71)
  • java 对List集合中元素对象按字段分组,并收集指定字段的值

    一、实现:对已有对象集合ListPersion ,需要获取Persion对象的字段 name分组, 并对年龄age字段值做收集 二、字段分组收集方法  注:由于实际业务只有String类型跟数字类型,所以只对String跟Object两种类型判空 三、测试代码 四、结果

    2024年02月15日
    浏览(50)
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

    请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 使用stream().map()提取List对象的某一列值及去重 使用 findAny() 和 findFirst() 获取第一条数据 我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!! 参考链接、参考链接

    2024年04月11日
    浏览(70)
  • 根据list中的对象某个属性 进行分组

    1,跟据某个属性分组OfficeId 2,根据某个属性分组OfficeId,汇总某个属性Money 3,根据某个属性添加条件过滤数据, 4,判断一组对象里面有没有属性值是某个值 5,取出一组对象的某个属性组成一个新集合 6.List 去重 7.java stream中的findFirst 返回出现的第一个结果 8.stream自定义k

    2024年02月11日
    浏览(52)
  • Postman传递@requestbody标注的List集合的传参遇到的问题

    我们想测试如下接口 这里对应了三个传入参数,因为deviceList是必须的,Device作为我们自己封装的JavaBean,我们想要直接传参的话,前端传递一个List过来,这个是被@Requestbody修饰的,同时还存在两个由@RequestParam修饰的包装类,因此, @RequestBody主要用来接收前端传递给后端的

    2024年02月16日
    浏览(37)
  • Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将...

    Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将List转换为DataFrame对象呢?本文将介绍如何使用Python中Pandas库将List转换为DataFrame,并进一步将其转换为字符串。 将Python List转换为Pandas D

    2024年02月15日
    浏览(52)
  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作

    场景及代码案例源于实际项目 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投资人现有资产,rateOfReturn表示投资年回报率 需求: 1.计算投资人年龄之和; 2.根据现有资产及投资回报率,计算所有投资人一年后的资产总和; 实体

    2023年04月22日
    浏览(67)
  • 遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素

    测试数据 1. 普通for循环 普通for循环,通过索引遍历 2. 增强for循环 增强for循环,数组以及所有Collection集合都可以使用增强for循环遍历。遍历集合的实际原理为获取集合的iterator迭代器对象进行迭代遍历。 3. Iterator迭代器遍历 Collection接口继承自Iterable接口,所有Collection集合都

    2024年02月13日
    浏览(45)
  • Collections工具类,可以使用collections工具类对代码中的list进行分组

    当我们需要对代码list进行分组的时候,有时候使用for循环会显得很蠢,那么使用Colletions工具类就会很方便,根据所需要的分类值,进行映射分组集合,以上是案例 toMap 返回map集合 MapLong, ListLong toList 返回list集合 tips stream流一样好用

    2024年03月23日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包