java - 使用流将 Map<A, Map<B, C>> 转换为 Map<B, Map<A, C>>

标签 java java-8 java-stream

我有像这样的 map 的结构图:

Map<Center, Map<Product, Value>> given

我想得到

Map<Product, Map<Center, Value>> result

我用过 Java 流

Map<Product, Map<Center, Value>> result = given.entrySet().stream()
        .flatMap(entry -> entry.getValue()
                 .entrySet().stream()
                 .map(e -> Triple(entry.getKey(), e.getKey(), e.getValue())))
        .collect(Collectors.groupingBy(Triple::getProduct,
                    Collectors.toMap(Triple::getCenter, Triple::getValue)));

其中 Triple 是简单值类。我的问题是是否可以在不使用 Triple 或例如Table 来自 Guava ?

最佳答案

没有流,有些事情更容易完成:

Map<Product, Map<Center, Value>> result = new HashMap<>();
given.forEach((c, pv) -> pv.forEach((p, v) ->
        result.computeIfAbsent(p, k -> new HashMap<>()).put(c, v)));

关于java - 使用流将 Map<A, Map<B, C>> 转换为 Map<B, Map<A, C>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53289504/

相关文章:

java - 短时间间隔重复方法

java - Java 新手,想知道 Scanner 读取的 if 语句和字符串

java - 如何访问 Java 7 java.nio.file.Path 中的子文件/文件夹?

java - 按对象属性分组

java - 如何使用 Java 8 将 LinkedHashMap 列表转换为自定义对象列表

java - 在同步方法中使用wait()和notify()

java - 为什么 .forEach(val -> list.add()) 编译而 .forEach(val -> true) 不编译?

java - IdentityHashMap.hash() 中这段代码的用途是什么?

Java 8/Lambdas/Streams : Subclassing Function<T, R> 导致 andThen() 方法出现问题

java - 流过滤器效果不佳我想打印 10 行