У меня есть Map
следующего вида - Map<String, List<Map<String, String>>>
. Содержит элементы в следующем формате:
"1" - [M1, M1, M3]
"2" - [M1, M2, M3]
"3" - [M4]
"4" - [M2, M5]
где,
"1","2","3","4"
- ключи внешней карты Map<<b>String</b>, List<Map<String, String>>>
. Давайте назовем их outerKey
. Итак, M1
s outerKey
s "1", "2"
оба. Для M2
это "2", "4"
и т. Д.
M1, M2, M3, M4, M5
- внутренние карты Map<String, List<<b>Map<String, String></b>>>
Первичным ключом различия между внутренними картами является 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"
}]
}
Use the following code to convert it into Map:
(JSONObject)JSONValue.parseWithException(data)
Вывод будет:
[{
"k1": "m1",
"k2": "n1",
"outerKey": "2"
}, {
"k1": "m2",
"k2": "n2",
"outerKey": "4"
}, {
"k1": "m3",
"k2": "n3",
"outerKey": "2"
}, {
"k1": "m4",
"k2": "n4",
"outerKey": "3"
}, {
"k1": "m5",
"k2": "n5",
"outerKey": "4"
}]
У меня возникли проблемы с этим в java8?
Я попытался получить поток Map<String, String>
и одновременно добавить запись (outerKey
), выполнив следующее:
a.entrySet().stream().flatMap(e -> e.getValue().stream(m -> m.put("outerKey",e.getKey())))
, но возвращает Stream<String>
, поскольку map.put
возвращает предыдущее значение, связанное с ключом.
Следовательно, я не смог получить Stream<Map>
с добавленным entry
. Куда я иду не так?