Java stream 分组
时间: 2024-08-17 19:00:33 浏览: 31
Java Stream API 提供了一个强大的功能,即分组(Grouping)。分组允许你在集合上按照某个键(Key)对元素进行分类,然后对每个分组应用聚合操作。`Stream` 的 `collect()` 方法配合 `Collectors.groupingBy()` 或 `Collectors.partitioningBy()` 等函数可以用于这个目的。
例如,如果你有一个学生列表,你可以按年龄将他们分组:
```java
List<Student> students = ...;
Map<Integer, List<Student>> ageGroups = students.stream()
.collect(Collectors.groupingBy(Student::getAge));
```
这里,`ageGroups` 就是一个 Map,键是学生的年龄,值是对应年龄的学生列表。
对于 `partitioningBy()`,它可以返回两个独立的流,一个包含满足给定断言的元素,另一个包含不满足的元素:
```java
Map<Boolean, List<Student>> hasPassedTest = students.stream()
.collect(Collectors.partitioningBy(student -> student.hasPassedTest()));
```
这会给你一个布尔值对应的流,真表示通过测试的学生,假表示未通过测试的学生。
相关问题
java stream分组
Java Stream分组可以使用Collectors.groupingBy()方法来实现。该方法接受一个Function参数,用于指定根据哪个属性进行分组,返回一个Map对象,键为分组属性值,值为分组的数据列表。例如,可以使用以下代码将一个字符串数组按照长度分组:
String[] strs = {"a", "bb", "ccc", "dddd", "eeeee"};
Map<Integer, List<String>> groups = Arrays.stream(strs)
.collect(Collectors.groupingBy(String::length));
这样,groups就是一个Map对象,其中键为字符串长度,值为该长度的字符串列表。例如,groups.get(1)就是一个包含字符串"a"的列表,groups.get(2)就是一个包含字符串"bb"的列表,以此类推。
java stream 分组
Java 8 中的 Stream API 提供了一个非常方便的方法来对集合中的元素进行分组。
可以使用 `Collectors.groupingBy()` 方法来实现分组操作。该方法接收一个 Function 作为参数,该函数将每个元素映射到一个键值,然后返回一个 Map,其中键是映射结果,值是对应的元素列表。
例如,假设有一个包含员工对象的列表,可以按照员工的部门进行分组,代码如下:
```
List<Employee> employees = ...;
Map<String, List<Employee>> employeesByDepartment = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
```
在上面的代码中,`Employee::getDepartment` 是一个方法引用,它将每个员工对象映射到其所属的部门。`Collectors.groupingBy()` 方法将按照部门将员工对象分组,并返回一个 `Map<String, List<Employee>>` 类型的结果。
注意,`groupingBy()` 方法还可以接收一个第二个参数,该参数指定了分组后每个组中元素的类型。例如,可以将上面的示例代码修改为以下形式:
```
Map<String, Set<Employee>> employeesByDepartment = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment, Collectors.toSet()));
```
在这个例子中,我们将使用 `Collectors.toSet()` 方法来指定每个组中元素的类型为集合,而不是列表。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)