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然后在此处查找