我正在尝试将项目从Map
内部移动到Map
外部。
我正在尝试从下面的List
中获取rowIdentifier:
List<Map<Object,Object>>
// [{"rowIdentifier": "s5", "rowKey1": 5, "rowKey2": 7},{"rowIdentifier": "s7", "rowKey1": 9, "rowKey2": 9}]
进入结果
Map<Map<Object,Object>>
// {"s5": {"rowKey1": 5, "rowKey2": 7}, "s7": {"rowKey1": 9, "rowKey2": 9}
我在理解
groupingBy
和collect(Collectors.mapping)
与Collectors.toMap
时遇到了一些麻烦(我不确定我是否理解Java Stream
中的'mapping'与'toMap'函数之间的区别。或者甚至我需要这样做。DictByRowIdentifier [r [“rowIdentifier”]]是我计划以后调用它的方式。
网络上的许多示例似乎只是将其收集为
List
或Set
。他们似乎并没有将其扔回到另一个Map
中,因此很难找到示例。 最佳答案
要回答您的直接问题,您需要两次 toMap()
:
List<Map<String, String>> listOfMaps = new ArrayList<>(); // populated elsewhere
Map<String, Map<String, String>> mapOfMaps = listOfMaps.stream()
.collect(Collectors.toMap(m -> m.get("rowIdentifier"),
m -> m.entrySet().stream().filter(e -> !e.getKey().equals("rowIdentifier"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))));
我将类型更改为
String
,因为这就是它们的类型,它可以使所有内容编译时都不会发出警告。