多语言展示
当前在线:600今日阅读:113今日分享:31

java List 如何进行分组

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。      Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
工具/原料
1

电脑

2

IntelliJ IDEA

方法/步骤
1

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

3

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

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 list = new ArrayList();        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 sex = new HashSet(list.stream().map(Student::getSex).collect(Collectors.toList()));        Set grade = new HashSet(list.stream().map(Student::getGrade).collect(Collectors.toList()));        //循环分组             Map> map = new HashMap>();        for (String string : sex) {            for (String str : grade) {                if (string == null || str == null) {                    continue;                }                List sl = new ArrayList();                for (Student student : list) {                    if (string.equals(student.getSex()) && str.equals(student.getGrade())) {                        sl.add(student);                    }                }                map.put(string + str, sl);            }        }        //查看测试结果              for (Map.Entry> listsList1 : map.entrySet()) {            for (Student st : listsList1.getValue()) {                System.out.println(st.getSex() + ' name:' + st.getName() + '  ' + st.getGrade());            }            System.out.println('--------------------------');        }    }}

5

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

注意事项
1

上面的代码需要jdk1.8以上的版本才能正常使用。jdk1.8以下可以参考思路。

2

测试工具不限制IDEA其它工具效果一样

3

有不足的地方欢迎万能的网友留言!

推荐信息