java List 如何进行分组

时间:2024-10-13 04:17:22

1、第一步:javalist分组的需求实现思路。一班情况下我们遇到这种情况都是在List集合中放的是对象的情况下,我们需要将根据对象的某一个属性值或多个属性值分组。实现方式还是比较多的,1、借助jdk1.8新提供的Collectors.groupingBy2、借助于for或者请它循环,当然原始for循环的执行速度是最快的。

2、第二步:jdk1.8新方法实现。先编写实体类:Studentpublic 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; }}在编写测试类:Testimport 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、搏皋咬夼实体类使用的还是Student3、设计思路就是先将要分组的两个字段分别转为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 如何进行分组
© 手抄报圈