java 8 按指定字段分组
时间: 2023-09-08 10:11:40 浏览: 91
【IT十八掌徐培成】Java基础第24天-04.分组查询-having-连接查询-笛卡尔积.zip
在 Java 8 中,可以使用 Stream API 中的 `Collectors.groupingBy()` 方法按指定字段分组。具体实现如下:
假设有一个 `Student` 类,包含姓名、年龄、性别等属性,需要按照性别字段进行分组。
```java
import java.util.*;
import java.util.stream.Collectors;
public class Student {
private String name;
private int age;
private String gender;
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Tom", 18, "male"),
new Student("Jerry", 20, "male"),
new Student("Lucy", 22, "female"),
new Student("Lily", 19, "female"),
new Student("Jim", 21, "male")
);
Map<String, List<Student>> groupByGender = students.stream()
.collect(Collectors.groupingBy(Student::getGender));
groupByGender.forEach((gender, list) -> {
System.out.println(gender + ": " + list.toString());
});
}
}
```
输出结果为:
```
female: [Student{name='Lucy', age=22, gender='female'}, Student{name='Lily', age=19, gender='female'}]
male: [Student{name='Tom', age=18, gender='male'}, Student{name='Jerry', age=20, gender='male'}, Student{name='Jim', age=21, gender='male'}]
```
使用 `Collectors.groupingBy()` 方法,可以将一个 `Stream` 对象中的元素按照指定的字段(这里是 `Student` 类的 `gender` 属性)进行分组,返回一个 `Map` 对象,其中键为分组的字段值,值为该分组中的元素列表。在上面的代码中,最后通过 `forEach()` 方法遍历分组后的 `Map` 对象,输出每个分组的结果。
阅读全文