gpt4 book ai didi

java - 如何将列表转换为 map 的 map Map>

转载 作者:行者123 更新时间:2023-11-30 09:59:58 28 4
gpt4 key购买 nike

我有一个 List<Employee>我想转换成的 e Map<String, Map<String,Emp>>其中外部字符串应为“Name”,内部字符串应为“Domain”。

       Name Id Domain
e(0) - Emp1, 1, Insurance
e(1) - Emp1, 2, Sales
e(2) - Emp2, 3, Sales
e(3) - Emp4, 4, Marketing

我尝试了以下-

e.stream().collect(Collectors.groupingBy(
Employee::getName,
toMap(Employee::getDomain,Emp)));

所以预期的输出图应该是这样的

<Emp1>
<Insurance, e(0)>
<Sales, e(1)>
<Emp2>
<Sales, e(2)>
<Emp4>
<Marketing, e(3)>

但我只得到唯一值,实际输出-

<Emp1>
<Insurance, e(0)>
<Emp2>
<Sales, e(2)>
<Emp4>
<Marketing, e(3)>

有人能告诉我最好的方法吗?

最佳答案

您主要寻找的是嵌套分组,例如:

Map<String, Map<String, List<Employee>>> groupedMap = employees.stream()
.collect(Collectors.groupingBy(Employee::getName,
Collectors.groupingBy(Employee::getDomain, Collectors.toList())));

注意 - 值为 List<Employee>这是按姓名分组的员工,然后按域分组。 (两者都加入了一个列表。)


如果您要严格遵守让单个员工对应于指定的分组,那么代码只需稍加修改就对我来说非常适用:

Map<String, Map<String, Employee>> groupedReducedMap = employees.stream()
.collect(Collectors.groupingBy(Employee::getName,
Collectors.toMap(Employee::getDomain,
Function.identity(), // value as the employee instance
(a, b) -> a))); // choose first instance for similar 'domain'

关于java - 如何将列表转换为 map 的 map Map<String, Map<String,Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58426745/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com