Java 8 嵌套映射上的Java8流操作-Map<;字符串,列表<;地图>&燃气轮机;

Java 8 嵌套映射上的Java8流操作-Map<;字符串,列表<;地图>&燃气轮机;,java-8,hashmap,java-stream,Java 8,Hashmap,Java Stream,我有一张以下类型的地图-地图。它包含以下格式的元素: "1" - [M1, M1, M3] "2" - [M1, M2, M3] "3" - [M4] "4" - [M2, M5] 在哪里, “1”、“2”、“3”、“4”是映射的外部映射的键。让我们把它们叫做outerKey。因此,M1的outerKey都是“1”、“2”。对于M2,它是“2”、“4”等 M1、M2、M3、M4、M5是Map 内部映射之间区别的主键是k1键。(除了k1之外,内部映射中还有其他条目)。例如: M1-{“k1”:“

我有一张以下类型的
地图
-
地图
。它包含以下格式的元素:

"1" - [M1, M1, M3]
"2" - [M1, M2, M3]
"3" - [M4]
"4" - [M2, M5]
在哪里,

“1”、“2”、“3”、“4”是
映射的外部映射的键。让我们把它们叫做
outerKey
。因此,
M1
outerKey
都是
“1”、“2”
。对于
M2
,它是
“2”、“4”等

M1、M2、M3、M4、M5是
Map

内部映射之间区别的主键是
k1
键。(除了
k1
之外,内部映射中还有其他条目)。例如:

M1
-
{“k1”:“M1”、“k2”:“n1”}
M2
-
{“k1”:“M2”、“k2”:“n2”}

现在,我想提取一个唯一的内部映射列表以及它的最高
outerKey
。例如,对于上述输入,输出应为:

M1 - "2"
M2 - "4"
M3 - "2"
M4 - "3"
M5 - "4"
outerKey
也可以插入地图中,这样我们就可以得到地图列表

因此,对于示例输入:

{
"1": [{
“k1”:“m1”,
“k2”:“n1”
}, {
“k1”:“m1”,
“k2”:“n1”
}, {
“k1”:“m2”,
“k2”:“n2”
}],
"2": [{
“k1”:“m1”,
“k2”:“n1”
}, {
“k1”:“m2”,
“k2”:“n2”
}, {
“k1”:“m3”,
“k2”:“n3”
}],
"3": [{
“k1”:“m4”,
“k2”:“n4”
}],
"4": [{
“k1”:“m2”,
“k2”:“n2”
}, {
“k1”:“m5”,
“k2”:“n5”
}]
}
使用以下代码将其转换为地图:
(JSONObject)JSONValue.parseWithException(数据)
以下工作:

a.entrySet()
            .stream()
            .flatMap(e -> e.getValue().stream().map(m -> {m.put("outerKey",e.getKey());return m;}))
            .collect(
                groupingBy(m -> m.get("k1"),collectingAndThen(maxBy(comparing(m -> m.get("outerKey"))),o -> ((Optional)o).get())
                )
            )
            .values()
输出:

[{outerKey=2, k1=m1, k2=n1}, {outerKey=4, k1=m2, k2=n2}, {outerKey=2, k1=m3, k2=n3}, {outerKey=3, k1=m4, k2=n4}, {outerKey=4, k1=m5, k2=n5}]

“到目前为止你们都做了些什么?”唐纳德选民:对你们来说,这似乎是一个非常琐碎的问题。可能不适合其他人。也许这就是我问的原因?我没有仔细阅读,但是如果你想要一个
m->{m.put(“outerKey”,e.getKey();return m;}),那么
就不起作用了。
m->{m.put(“outerKey”,e.getKey());return m;}
我想这应该起作用。为什么它不起作用呢?因为至少您会多次输入此条目,您可能正在寻找
收集器。CollectingAnd然后在此处查找