【发布时间】:2019-04-30 14:29:23
【问题描述】:
我有我想按 2 列分组的对象列表,然后使用 toMap 收集所有值。
假设我有一个具有 5 个属性的对象。 A 类 (a,b,c,d,e) 和这些对象的列表说列表。我想要实现的是按 a、b 分组并创建一个键为 c 的地图以及包括它在内的所有对象。
//Expected format of output map:
Map<a, Map<b, Map<c, List<A>> myMap = new HashMap<>();
myMap = list.stream().
.collect(Collectors.groupingBy(A::a,
Collectors.groupingBy(A::b,
Collectors.toMap(A::c, Collectors.toList()))); //-> Here i'm expecting the map's key will be C and values should be all the onces which are grouped by a & b.
【问题讨论】:
-
按
(a, b)分组但将c作为地图的键是没有意义的...您可以添加示例数据吗? -
是的,它可能不会增加价值,但我有一个用例,我最终以这种方式形成地图,以便将其发送到其他预期的服务。
-
你能展示一个输入数据到输出数据的例子吗@SantoshKsl
-
@SantoshKsl 你试过
.collect(groupingBy(A::getA, groupingBy(A::getB, groupingBy(A::getC))))吗? -
输入数据是平面对象。假设对象 a = 产品,b = 日期,c = 名称。而且我有一个单独的配置,例如相同的名称配置,例如 name1 可以等效于 { name 3 , name 4} 同样 name 5 -> {name 6, name7} 。因此,根据示例,我按产品和日期分组。现在我试图为给定名称(即 c)获取它的所有等效名称。所以按 c 分组,想把它们都收集起来。
标签: java java-8 java-stream