您的位置首页百科知识

java List 如何进行分组

java List 如何进行分组

的有关信息介绍如下:

java List 如何进行分组

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

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

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

实现方式还是比较多的,

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

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

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

List> groupList = new ArrayList>();

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

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

2java 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) {

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

}

}

}

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

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