2017-06-16 68 views
2

现在我想要将列表转换为地图,例如,如何将列表转换为地图<K,V>但不是列表<V>

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>而不是List?使用替代

回答

4

Collectors.toMapCollectors.groupingBy

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