用 JSON Parser 解析我的 json 文件后,我在 Java 中得到以下列表:
List< List<HashMap<String,String>>> fields = jsonContext.read(jsonPath);
此列表中的每个元素本身都是 HashMap 列表,并且来自以下 json 结构:
[
{
"value": "such",
"name": "yname"
},
{
"value": "Suchwort",
"name": "yvbeds"
},
{
"value": "",
"name": "yfix"
},
{
"value": "such",
"name": "yzielfeld"
}
],
[
{
"value": "ftext",
"name": "yname"
},
{
"value": "Freitext 1",
"name": "yvbeds"
},
{
"value": "",
"name": "yfix"
},
{
"value": "ftext",
"name": "yzielfeld"
}
],
这个 json 结构创建了四个映射,每个映射都有两个键值对。我想将这四张地图转换为一张地图。我在不使用流的情况下实现了这一点,如下所示:
List<HashMap<String,String>> newList = new ArrayList<>();
for(int i=0;i< fields.size();i++) {
HashMap<String,String> singleMap = new HashMap<>();
List<HashMap<String,String>> listItem = fields.get(i);
for(int j=0;j<listItem.size();j++) {
HashMap<String,String> fieldMap = listItem.get(j);
singleMap.put(fieldMap.get("name"),fieldMap.get("value"));
}
newList.add(singleMap);
}
我尝试了以下流方法,但收集到地图后,我需要再次收集到列表,但只有地图选项:
List<HashMap<String,String>> newList = fields.stream()
.flatMap(List::stream)
.collect(Collectors.toMap(value->value.get("name"),value->value.get("value")))
.
从您的非流代码中,您似乎想要将每个内部列表映射到其自己的单独的
Map
中。
因此,您不应该展平(
flatMap
)外部列表。 map
外部列表,以及 collect(toMap)
每个内部列表。
List<Map<String, String>> result = fields.stream()
.map(
l -> l.stream().collect(
// assuming the maps in each inner list do not have duplicate names
Collectors.toMap(x -> x.get("name"), x -> x.get("value"))
// if they do, give an appropriate merger function as the 3rd argument
)
)
.toList();