java8 Stream操作List<Map<String, Integer>>

安静的敲代码 发布于 2016/08/15 18:35
阅读 5K+
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

java 8 Stream在声明式编程方面很好用的感觉。最近发现,如果集合类型是List<Map<String, Integer>>,需要累计计算map中某一个key对应的值时,用Stream有点下不去手。不知有什么方法可以实现呢?谢谢。
加载中
1
canghailan
canghailan

先展开,再求和?

List<Map<String, Integer>> list = new ArrayList<>();
Random random = new Random();
String[] strings = { "A", "B", "C" };
for (int i = 0; i < 5; i++) {
	Map<String, Integer> map = new HashMap<>();
	for (int j = 0; j < 3; j++) {
		map.put(strings[random.nextInt(3)], random.nextInt(10));
	}
	list.add(map);
}
System.out.println(list);
Map<String, Integer> sum = list.stream() //
		.flatMap((map) -> map.entrySet().stream()) //
		.collect(Collectors.toMap(Entry::getKey, Entry::getValue, Integer::sum));
System.out.println(sum);



zhenhui
zhenhui
list.stream().flatMap((map) -> map.entrySet().stream()).collect(summingInt(Map.Entry::getValue));
安静的敲代码
安静的敲代码
回复 @canghailan : 非常感谢!
canghailan
canghailan
求特定key就在flatMap后filter一下
0
zhenhui
zhenhui

这种也要看情况吧,7也不错额,

int sum = 0; 
for (Map<String, Integer> map : maps) { for (String key : map.keySet()) {
        sum += map.get(key);  }
}


安静的敲代码
安静的敲代码
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部