我有一个Map是一个到值列表的映射,但是我需要将其求逆,以便
Map<Integer, List<String>>
变成
Map<String, List<Integer>>
例如我有
1 -> { A, B, C }
2 -> { B }
3 -> { A, C }
我想看看
A -> { 1, 3 }
B -> { 1, 2 }
C -> { 1, 3 }
除了要遍历映射条目并创建set条目(如果不存在)并添加到列表等之外,Java 8中还有什么更简单的方法可以做到这一点?我一直认为这确实很明显,但我无法解决。
提前致谢
未经测试,但是您可以执行以下操作:
mapIntToStrings.entrySet().stream()
.flatMap(entryIntToStrings -> entryIntToStrings.getValue().stream()
.map(str -> new AbstractMap.SimpleEntry<>(entryIntToStrings.getKey(), str)))
.collect(groupingBy(Map.Entry::getValue, mapping(Map.Entry::getKey, toList())))
问题内容: 如何转换 为? 这不起作用: 问题答案: 如果您只包含,则可以这样操作: 如果不是,则可以替换 为。
问题内容: 我需要转换为。我已经为这个问题苦苦挣扎了一段时间。 很明显如何转换为: 但是我找不到解决最初的问题。有一些易于使用的Java-8方法吗? 问题答案: 我想您很亲密,您需要将这些条目添加到a 并从那里收集。我使用了已经存在的,但是您也可以使用某种。 好吧,如果您不想增加这些实例的额外开销,则可以做些不同:
我有一个java map:
问题内容: 我一直在研究Jackson,但似乎我必须将Map转换为JSON,然后将所得的JSON转换为POJO。 有没有一种方法可以将Map直接转换为POJO? 问题答案: 好吧,您也可以使用Jackson来实现。(由于您正在考虑使用杰克逊,因此似乎更舒适)。 使用的方法: 无需转换为JSON字符串或其他内容;直接转换的速度要快得多。
问题内容: 我需要将Java转换为的实例(包括地图内容) 我应该怎么做才能使此代码可编译? 问题答案: 从Collectors.toMap(…)javadoc: 例如:
问题内容: 是否有更优雅/内置的方式来反转Hashmap的键和值? 我目前有以下。 问题答案: 您可能会考虑使用Guava的实现之一。例如: 或更笼统地说: