如何将列表转换为Map <k,v>而不是List <v>

时间:2017-06-16 13:00:16

标签: java-8

现在我想将列表转换为地图,例如

    TaskStat t1 = new TaskStat("foo1", "bar1", 1);
    TaskStat t2 = new TaskStat("foo1", "bar2", 2);
    ArrayList<TaskStat> list = newArrayList(t1, t2);

    Map<String, List<TaskStat>> map = list.stream().collect(groupingBy(e -> e.getA() + "_" + e.getB()));

    assertEquals(1,map.get("foo1_bar1").get(0).getCount());

因为taskStat列表来自group by sql

select a, b , count(*) from t group by a,b

所以每个a + b只有一个记录。

如何将列表转换为Map<String,TaskStat>而不是列表?

1 个答案:

答案 0 :(得分:4)

使用Collectors.toMap代替Collectors.groupingBy

 Map<String, TaskStat> result = 
     list.stream().collect(Collectors.toMap(ts -> ts.getA() + "_" + ts.getB(), 
                                  Function.identity()));