java List 如何进行分组
来源:网络收集 点击: 时间:2024-03-01第一步:javalist分组的需求实现思路。
一班情况下我们遇到这种情况都是在List集合中放的是对象的情况下,我们需要将根据对象的某一个属性值或多个属性值分组。
实现方式还是比较多的,
1、借助jdk1.8新提供的Collectors.groupingBy
2、借助于for或者请它循环,当然原始for循环的执行速度是最快的。
2/5第二步: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) {
ListStudent list = new ArrayListStudent();
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);
ListListStudent groupList = new ArrayListListStudent();
list.stream().collect(Collectors.groupingBy(Student::getGrade, Collectors.toList())).forEach((grade, fooListByAge) - {
studentList.forEach((student) - System.out.println(student.getGrade()));
});
}
}



第三步:测试jdk1.8分组代码:
1、在Test类中main方法左边,工具类中左键单击,弹出运行命令选择--》选择运行。如下图所示:
2、java jdk1.8新特性Lambda表达式
3、java jdk1.8新特性Stream API


第四步:双字段分组。
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) {
ListStudent list = new ArrayListStudent();
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
SetString sex = new HashSetString(list.stream().map(Student::getSex).collect(Collectors.toList()));
SetString grade = new HashSetString(list.stream().map(Student::getGrade).collect(Collectors.toList()));
//循环分组
MapString, ListStudent map = new HashMapString, ListStudent();
for (String string : sex) {
for (String str : grade) {
if (string == null || str == null) {
continue;
}
ListStudent sl = new ArrayListStudent();
for (Student student : list) {
if (string.equals(student.getSex()) str.equals(student.getGrade())) {
sl.add(student);
}
}
map.put(string + str, sl);
}
}
//查看测试结果
for (Map.EntryString, ListStudent listsList1 : map.entrySet()) {
for (Student st : listsList1.getValue()) {
System.out.println(st.getSex() + name: + st.getName() + + st.getGrade());
}
System.out.println(--------------------------);
}
}
}


第五步:测试双属性分组。
测试步骤同第三步基本相同,测试结结果如下图所示:

上面的代码需要jdk1.8以上的版本才能正常使用。jdk1.8以下可以参考思路。
测试工具不限制IDEA其它工具效果一样
有不足的地方欢迎万能的网友留言!
JAVALIST版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_206281.html