Java 8 列表到嵌套映射

标签 java java-8 java-stream collectors

我有一个 A 类的列表

class A {
 private Integer keyA;
 private Integer keyB;
 private String text;
}

我想将 aList 传输到由 keyAkeyB 映射的嵌套 Map

所以我创建了以下代码。

Map<Integer, Map<Integer,List<A>>> aMappedByKeyAAndKeyB = aList.stream()
    .collect(Collectors.collectingAndThen(Collectors.groupingBy(A::getKeyA), result -> {
        Map<Integer, Map<Integer, List<A>>> nestedMap = new HashMap<Integer, Map<Integer, List<A>>>();
        result.entrySet().stream().forEach(e -> {nestedMap.put(e.getKey(), e.getValue().stream().collect(Collectors.groupingBy(A::getKeyB)));});
        return nestedMap;}));

但我不喜欢这段代码。

我认为如果我使用 flatMap,我可以编写比这更好的代码。

但我不知道如何使用 flatMap 来实现这种行为。

最佳答案

似乎你只需要一个级联的groupingBy:

Map<Integer, Map<Integer,List<A>>> aMappedByKeyAAndKeyB = aList.stream()
    .collect(Collectors.groupingBy(A::getKeyA, 
                 Collectors.groupingBy(A::getKeyB)));

关于Java 8 列表到嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33644751/

相关文章:

Java 8 - 如何声明对返回 void 的未绑定(bind)非静态方法的方法引用

java - 使用 java Stream API 对日期进行排序、分组和计数

java 8流转换复杂 map

java - 将 Java WebView 添加到纯 Android NDK 应用程序

java - AspectJ - 获取带注释的方法参数的值

java-8 - 了解方法引用

java - AppEngine - 无法为 JSP 编译类

java - 为什么我无法获取 javac -version?

java - Spring Boot 2+ Thymeleaf 3.0.10 异常处理 - 无法返回 error.html

java - 在准备好的语句中处理 Oracle Date 数据类型的空值的正确方法