转换列表<map <string,object =“”>&gt; to Map <string,list <map <string,=“”object =“”>&gt;&gt;使用Java 8流API

时间:2018-01-29 20:18:28

标签: java-8 stream

我的问题与已经提出的问题here in stackoverflow几乎没有相似之处。我的意见如下:

Map<String, Object> m1 = new HashMap<>();
m1.put("group", "1");
m2.put("A", 10l);
m2.put("B", 20l);
m2.put("C", 100l);

Map<String, Object> m2 = new HashMap<>();
m1.put("group", "1");
m2.put("A", 30l);
m2.put("B", 40l);
m2.put("C", 500l);

List<Map<String, Object>> beforeFormatting = new ArrayList<>();
beforeFormatting.add(m1);
beforeFormatting.add(m2);

我的预期输出是:

Map<String, List<Map<String, Object>>> afterFormatting;

输出:

1 - &gt; [m1,m2]

我在下面尝试过,但是遇到了编译错误:好像我在做映射时出错:

Map<String, List<Map<String, Object>>> afterFormatting = beforeFormatting.stream()
                    .collect(groupingBy(map -> map.get("group_id"), toList()));

1 个答案:

答案 0 :(得分:2)

map.get("group_id")会返回Object,但您尝试将其映射到String,请更改返回类型:

Map<Object, List<Map<String, Object>>> afterFormatting = beforeFormatting.stream()
            .collect(Collectors.groupingBy(map -> map.get("group_id")));

此外,您可以删除toList,因为在使用单个参数的groupingBy时会隐式使用它。