java stream 分组
时间: 2023-07-20 19:37:23 浏览: 111
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()` 方法来指定每个组中元素的类型为集合,而不是列表。
阅读全文