广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    java List 如何进行分组

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

    第一步: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()));

    });

    }

    }

    3/5

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

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

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

    3、java jdk1.8新特性Stream API

    4/5

    第四步:双字段分组。

    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(--------------------------);

    }

    }

    }

    5/5

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

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

    注意事项

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

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

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

    JAVALIST
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_206281.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 11:57:43  耗时:0.027
    0.0274s