Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过生成映射到集合值中元素计数的每个键的新映射来报告多重映射_Java_Dictionary_Java Stream_Multimap_Multi Mapping - Fatal编程技术网

Java 通过生成映射到集合值中元素计数的每个键的新映射来报告多重映射

Java 通过生成映射到集合值中元素计数的每个键的新映射来报告多重映射,java,dictionary,java-stream,multimap,multi-mapping,Java,Dictionary,Java Stream,Multimap,Multi Mapping,想象一个跟踪人员的场景,每个人都有一个分配任务的列表 MappersonToTasks= 地图( 新人(“Alice”),(新任务(“a1”),(新任务(“a2”)的名单, 新人员(“Bob”),(新任务(“b1”)列表, 新人(“卡罗尔”),名单(新任务(“c1”)、新任务(“c2”)、新任务(“c3”)) ) ; 如何使用streams获得新的映射,将每个人员映射到一个整数,并在其分配任务列表中找到项目数 如何获得与此硬编码映射等效的结果: MappersonToTaskCount= 地图

想象一个跟踪人员的场景,每个人都有一个分配任务的列表

Map>personToTasks=
地图(
新人(“Alice”),(新任务(“a1”),(新任务(“a2”)的名单,
新人员(“Bob”),(新任务(“b1”)列表,
新人(“卡罗尔”),名单(新任务(“c1”)、新任务(“c2”)、新任务(“c3”))
)
;
如何使用streams获得新的映射,将每个
人员
映射到一个
整数
,并在其分配任务列表中找到项目数

如何获得与此硬编码映射等效的结果:

MappersonToTaskCount=
地图(
新人(“爱丽丝”),2,
新人(“Bob”),1,
新人(“卡罗尔”),3
)
;
我一直在尝试下列排列:

MappersonToTaskCount=
personToTasks.keySet().stream().collect
(
图
(
Map.Entry::getKey,
???
)
)
;

您走上了正确的道路,这里有一个可能的解决方案:

Map personToTaskCount=personToTasks
.entrySet()
.stream()
.collect(Collectors.toMap(e->e.getKey(),e->e.getValue().size());
该方法返回一个映射中的元素集合,即一组对象。
Map.Entry
保存映射中每个条目的键值对。我们可以向该对象请求键和值

在您的示例中,询问每个
Map.Entry的值会得到一个
列表
。然后我们可以查询这个列表的大小,它包含的元素的数量。此大小数字是我们希望为您的新地图,
map
设置的值

下面是上述代码的扩展版本,以使这些
Map.Entry
对象的作用更加明显

Map>personToTasks=
地图(
新人(“Alice”),(新任务(“a1”),(新任务(“a2”)的名单,
新人员(“Bob”),(新任务(“b1”)列表,
新人(“卡罗尔”),名单(新任务(“c1”)、新任务(“c2”)、新任务(“c3”))
);
映射<个人,整数>个人任务计数=
个人任务
.entrySet()
.stream()
.收集(
汤姆(
(Map.Entry>e)->{returne.getKey();},
(Map.Entry>e)->{returne.getValue().size();}
)
);
将结果转储到控制台

System.out.println(“personToTasks=“+personToTasks”);
System.out.println(“personToTaskCount=“+personToTaskCount”);
跑步的时候

personToTasks={Person[name=Alice]=[Task[title=a1],Task[title=a2]],Person[name=Carol]=[Task[title=c1],Task[title=c2],Task[title=c3]],Person[name=Bob]=[Task[title=b1]}

personToTaskCount={Person[name=Bob]=1,Person[name=Alice]=2,Person[name=Carol]=3}