我正在尝试将项目从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}

我在理解groupingBycollect(Collectors.mapping)Collectors.toMap时遇到了一些麻烦(我不确定我是否理解Java Stream中的'mapping'与'toMap'函数之间的区别。或者甚至我需要这样做。

DictByRowIdentifier [r [“rowIdentifier”]]是我计划以后调用它的方式。

网络上的许多示例似乎只是将其收集为ListSet。他们似乎并没有将其扔回到另一个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,因为这就是它们的类型,它可以使所有内容编译时都不会发出警告。

10-06 14:52