java stream filter后再分组
时间: 2024-09-15 18:03:57 浏览: 80
在Java中,使用Stream API可以方便地对集合进行一系列的转换和操作。如果你想要在对元素进行过滤之后再进行分组,可以链式调用filter和Collectors.groupingBy方法来实现。下面是一个简单的例子来展示这个过程:
假设我们有一个学生类`Student`,其中包含学生的姓名和性别属性,我们想要过滤出所有女性学生,然后按姓名进行分组。
```java
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Student {
private String name;
private String gender;
// 构造器、getter和setter省略
// 静态方法,用于创建学生列表
public static List<Student> createStudentList() {
return List.of(
new Student("张三", "男"),
new Student("李四", "女"),
new Student("王五", "女"),
new Student("赵六", "男")
);
}
public static void main(String[] args) {
List<Student> students = createStudentList();
Map<String, List<Student>> femaleStudentsByName = students.stream()
.filter(student -> "女".equals(student.getGender()))
.collect(Collectors.groupingBy(Student::getName));
// 打印分组后的学生姓名和对应的学生列表
femaleStudentsByName.forEach((name, studentsList) ->
System.out.println(name + ": " + studentsList.stream().map(Student::getName).collect(Collectors.toList()))
);
}
}
```
在这个例子中,我们首先通过`stream()`方法将学生列表转换为Stream,然后通过`filter()`方法筛选出女性学生,最后使用`collect()`方法和`Collectors.groupingBy()`收集器将筛选后的学生按姓名进行分组。
阅读全文
相关推荐


















