现在我想将列表转换为地图,例如
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>
而不是列表?
答案 0 :(得分:4)
使用Collectors.toMap
代替Collectors.groupingBy
Map<String, TaskStat> result =
list.stream().collect(Collectors.toMap(ts -> ts.getA() + "_" + ts.getB(),
Function.identity()));