DMc*_*Mcg 0 java grouping java-stream
我有一个这样的班...
class Data { int id, int parent}
Run Code Online (Sandbox Code Playgroud)
还有像这样的对象列表......
List<Data> dataList = new ArrayList();
dataList.add(new Data(1,0));
dataList.add(new Data(2,1));
dataList.add(new Data(3,1));
dataList.add(new Data(4,2));
dataList.add(new Data(5,2));
Run Code Online (Sandbox Code Playgroud)
我想使用流媒体 API 将我的列表收集到一个
Map<Data, List<Data>>
Run Code Online (Sandbox Code Playgroud)
其中地图的键是父级,值是子级。
任何帮助将不胜感激。谢谢
Collectors.groupingBy()可以给你一个Map<Integer, List<Data>>关键是父ID的地方:
Map<Integer, List<Data>> map =
dataList.stream()
.collect(Collectors.groupingBy(Data::getParent));
Run Code Online (Sandbox Code Playgroud)
如果您希望 key 是Data与父 ID 对应的实例,则需要先准备 ID 到相应Data实例的映射:
Map<Integer, Data> ids = dataList.stream()
.collect(Collectors.toMap(Data::getID, Function.identity()));
Run Code Online (Sandbox Code Playgroud)
进而:
Map<Data, List<Data>> map =
dataList.stream()
.collect(Collectors.groupingBy(d -> ids.get(d.getParent())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |