基于具有父子关系的对象的Java流分组

基于具有父子关系的对象的Java流分组,java,java-stream,grouping,Java,Java Stream,Grouping,我有一个这样的班 class Data { int id, int parent} 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)); 还有一系列像这样的东西 clas

我有一个这样的班

class Data { int id, int parent}
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));
还有一系列像这样的东西

class Data { int id, int parent}
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));
我想使用流式api将我的列表收集到

Map<Data, List<Data>>
其中,映射的键是父项,值是子项

任何帮助都将不胜感激。感谢收集器。groupingBy可以为您提供一个地图,其中键是父ID:

Map<Integer, List<Data>> map =
    dataList.stream()
            .collect(Collectors.groupingBy(Data::getParent));
然后:

Map<Data, List<Data>> map =
    dataList.stream()
            .collect(Collectors.groupingBy(d -> ids.get(d.getParent())));

是的,我在想我可以一次完成,但似乎不行。谢谢你的清晰和快速reply@DMcg我想那是个意外-D@Eran,你能帮我发一封信吗equivalent@binrebin我不能。我不知道kotlin。@Amadán,可以吗?如果以后不需要更改列表,可以使用array.asListT。。。创建一个列表。