java stream 递归 分组
时间: 2023-06-29 11:09:33 浏览: 65
可以使用Java Stream的递归分组来实现该功能。下面是一个示例代码:
```java
import java.util.*;
import java.util.stream.*;
public class RecursiveGrouping {
public static void main(String[] args) {
List<Map<String, Object>> data = Arrays.asList(
Map.of("id", 1, "name", "Alice", "parent_id", null),
Map.of("id", 2, "name", "Bob", "parent_id", 1),
Map.of("id", 3, "name", "Charlie", "parent_id", 2),
Map.of("id", 4, "name", "Dave", "parent_id", 3),
Map.of("id", 5, "name", "Eve", "parent_id", 2),
Map.of("id", 6, "name", "Frank", "parent_id", null),
Map.of("id", 7, "name", "Grace", "parent_id", 6),
Map.of("id", 8, "name", "Hank", "parent_id", 7)
);
Map<String, List<Map<String, Object>>> result = groupByParentId(null, data);
System.out.println(result);
}
private static Map<String, List<Map<String, Object>>> groupByParentId(Object parentId, List<Map<String, Object>> data) {
return data.stream()
.filter(map -> Objects.equals(map.get("parent_id"), parentId))
.collect(Collectors.groupingBy(map -> map.get("name").toString(),
Collectors.mapping(map -> groupByParentId(map.get("id"), data), Collectors.toList())));
}
}
```
这个示例代码将给定的数据列表按照parent_id递归分组,并返回一个Map对象,其中键为每个组的名称,值为该组内的所有元素列表。这个方法可以递归地处理任意深度的嵌套分组。