Java 流按 List<Map<String, Object>> 分组到 Map<Integer, List<Integer>>

标签 java java-stream

我有一个

List<Map<String, Object>>

来自 Spring NamedParameterJdbcTemplate queryForList 调用。数据返回如下所示:

[{"id":5,"uid":6}, {"id":5,"uid":7}, {"id":6,"uid":8}, {"id":7,"uid":7}, {"id":8,"uid":7}, {"id":8,"uid":9}]

如何按照以下格式重新排列数据?

{5:[6, 7], 6:[8], 7:[7], 8:[7, 9]}

我希望返回 Map<Integer, List<Integer>>

有人知道我该如何实现这一目标吗?任何帮助非常感谢?

最佳答案

这是 Collectors.groupingBy 与下游收集器(例如 Collectors.mapping)的工作

 Map<Integer, List<Integer>> result = l.stream()
            .collect(Collectors.groupingBy(
                    m -> (Integer) (m.get("id")),
                    Collectors.mapping(m -> (Integer) m.get("uuid"), Collectors.toList())));

或者根本没有流:

list.forEach(x -> {
        Integer key = (Integer) x.get("id");
        Integer value = (Integer) x.get("uuid");
        result.computeIfAbsent(key, ignoreMe -> new ArrayList<>()).add(value);
    });

关于Java 流按 List<Map<String, Object>> 分组到 Map<Integer, List<Integer>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975124/

相关文章:

java - 什么时候抛出 java.lang.EnumConstantNotPresentException?

java - 友元数组递归

Java 定时器任务

java - 如何使用 Java 8 流制作笛卡尔积?

java - 为什么 Stream.allMatch(在 Java 8 中)尝试计算所有表达式,即使可以在中途确定值?

java - Google 喜欢 Wicket 中的分页

java - 可以通过 Java 泛型类型系统强制执行自然排序吗?

Java 8 流对具有 boolean 字段的元素执行某些操作

java - 正则表达式查找字符串中的变量

java - Java流问题,mapToInt和平均值方法