Java 如何转动地图<;列表<;K>;,列表<;V>&燃气轮机;进入地图<;K、 列表<;V>>;?
在代码的某一部分中,我遇到的情况是,集合的类型是我需要的:Java 如何转动地图<;列表<;K>;,列表<;V>&燃气轮机;进入地图<;K、 列表<;V>>;?,java,collections,java-stream,Java,Collections,Java Stream,在代码的某一部分中,我遇到的情况是,集合的类型是我需要的: Map<Specialization, List<SpecialistInfo>> specialistsMap = specialistsResponse .getSpecialists() .stream() .collect(groupingBy(SpecialistInfo::getSpecializations)); Map specialistsMap=specialistr
Map<Specialization, List<SpecialistInfo>> specialistsMap = specialistsResponse
.getSpecialists()
.stream()
.collect(groupingBy(SpecialistInfo::getSpecializations));
Map specialistsMap=specialistresponse
.getexperties()
.stream()
.收集(分组方式(SpecialistInfo::getSpecializations));
但实际上,该流返回一个映射。
getexperties()
方法返回列表专家
和SpecialistInfo
的每个实例也包含一个列表。因此,getSpecializations方法返回列表专门化
我需要将我的地图分组为地图
如何通过流API实现它?因此您有一个列表
,每个SpecialistInfo
都有一个列表
。你需要反向映射这些。据推测,Specialization
和SpecialistInfo
是唯一的,并且Specializations
和SpecialistInfo
之间存在着多对多的关系
如果您正在寻找一种不使用streams API的线程安全解决方案(与YCF\L的解决方案相比)
List experties=getexperties();
Map specMap=newhashmap();
对于(SpecialistInfo specInfo:specialists){
对于(专门化规范:specInfo.getSpecializations()){
specMap.computeIfAbsent(spec,k->newArrayList()).add(specInfo);
}
}
是否要复制数据?像专门化一样,同一个列表与同一个值列表相关?我没有对此进行测试,但我很好奇是否可以使用.collect(Collectors.flatMapping(specialistInfo->specialistInfo.getSpecializations().stream(),Collectors.groupingBy(Function.identity())代码>输入数据结构包含的内容并不完全清楚。专门化
是否在地图中用作键的所有列表中都是唯一的?值'List是否属于键列表的所有特殊化?它不起作用。我有一个异常“cannot internal functional interface type”@MaksimRybalkin My bad,我没有先编译它就写了这个。我活该。。。我已经修改了答案,希望有帮助!