java List 如何进行分组

2025-11-14 16:07:09

1、第一步:javalist分组的需求实现思路。

一班情况下我们遇到这种情况都是在List集合中放的是对象的情况下,我们需要将根据对象的某一个属性值或多个属性值分组。

实现方式还是比较多的,

1、借助jdk1.8新提供的Collectors.groupingBy

2、借助于for或者请它循环,当然原始for循环的执行速度是最快的。

2、第二步:jdk1.8新方法实现。

先编写实体类:Student

public class Student {

public Student(String name, String sex, String grade) {

this.name = name;

this.sex = sex;

this.grade = grade;

}

private String name;

private String sex;

// 班级

private String grade;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getGrade() {

return grade;

}

public void setGrade(String grade) {

this.grade = grade;

}

}

在编写测试类:Test

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Collectors;

public class Test {

public static void main(String[] args) {

        List<Student> list = new ArrayList<Student>();

        Student student1 = new Student("李四1", "女", "一班");

        Student student2 = new Student("李四2", "女", "一班");

        Student student3 = new Student("李四3", "女", "一班");

        Student student4 = new Student("李四4", "男", "一班");

        Student student5 = new Student("李四5", "男", "一班");

        Student student6 = new Student("李四6", "男", "二班");

        Student student7 = new Student("李四7", "男", "二班");

        Student student8 = new Student("李四8", "男", "二班");

        Student student9 = new Student("李四9", "男", "二班");

        list.add(student1);

        list.add(student2);

        list.add(student3);

        list.add(student4);

        list.add(student5);

        list.add(student6);

        list.add(student7);

        list.add(student8);

        list.add(student9);

        List<List<Student>> groupList = new ArrayList<List<Student>>();

        list.stream().collect(Collectors.groupingBy(Student::getGrade, Collectors.toList())).forEach((grade, fooListByAge) -> {

            studentList.forEach((student) -> System.out.println(student.getGrade()));

        });

    }

}

java List 如何进行分组

java List 如何进行分组

java List 如何进行分组

3、第三步:测试jdk1.8分组代码:

1、在Test类中main方法左边,工具类中左键单击,弹出运行命令选择--》选择运行。如下图所示:

2、java jdk1.8新特性Lambda表达式

3、java jdk1.8新特性Stream API

java List 如何进行分组

java List 如何进行分组

4、第四步:双字段分组。

1、此处依然使用了jdk1.8的新特性(转set时),也可以自己写两个for循环替代。

2、实体类使用的还是Student

3、设计思路就是先将要分组的两个字段分别转为set集合去重,然后借助双层for循环,尽心分组。具体实现代码如下所示:

package com.example.ttdc;

import org.springframework.util.StringUtils;

import java.util.*;

import java.util.stream.Collectors;

public class Test2 {

public static void main(String[] args) {

        List<Student> list = new ArrayList<Student>();

        Student student1 = new Student("李四1", "女", "一班");

        Student student2 = new Student("李四2", "女", "一班");

        Student student3 = new Student("李四3", "女", "一班");

        Student student4 = new Student("李四4", "男", "一班");

        Student student5 = new Student("李四5", "男", "一班");

        Student student6 = new Student("李四6", "男", "二班");

        Student student7 = new Student("李四7", "男", "二班");

        Student student8 = new Student("李四8", "男", "二班");

        Student student9 = new Student("李四9", "男", "二班");

        list.add(student1);

        list.add(student2);

        list.add(student3);

        list.add(student4);

        list.add(student5);

        list.add(student6);

        list.add(student7);

        list.add(student8);

        list.add(student9);

        //统计不重复sex      

        Set<String> sex = new HashSet<String>(list.stream().map(Student::getSex).collect(Collectors.toList()));

        Set<String> grade = new HashSet<String>(list.stream().map(Student::getGrade).collect(Collectors.toList()));

        //循环分组     

        Map<String, List<Student>> map = new HashMap<String, List<Student>>();

        for (String string : sex) {

            for (String str : grade) {

                if (string == null || str == null) {

                    continue;

                }

                List<Student> sl = new ArrayList<Student>();

                for (Student student : list) {

                    if (string.equals(student.getSex()) && str.equals(student.getGrade())) {

                        sl.add(student);

                    }

                }

                map.put(string + str, sl);

            }

        }

        //查看测试结果      

        for (Map.Entry<String, List<Student>> listsList1 : map.entrySet()) {

            for (Student st : listsList1.getValue()) {

                System.out.println(st.getSex() + " name:" + st.getName() + "  " + st.getGrade());

            }

            System.out.println("--------------------------");

        }

    }

}

java List 如何进行分组

java List 如何进行分组

5、第五步:测试双属性分组。

测试步骤同第三步基本相同,测试结结果如下图所示:

java List 如何进行分组

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢