如何求两个键相同的map对应value的差值?

小灰灰 2024-02-29 06:30 71阅读 0赞

利用merge()函数。

Map mapDifference= new HashMap<>(map2);
map1.forEach((key,value)->mapDifference.merge(key,value,(v1,v2)->v2-v1));

示例如下:

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.Map.Entry;
  4. class Test {
  5. public static void main(String args[]){
  6. Map<String,Integer> map1= new HashMap<>();
  7. Map<String,Integer> map2= new HashMap<>();
  8. map1.put("aaa",8); map1.put("bbb",7); map1.put("ccc",5);
  9. map2.put("aaa",5); map2.put("bbb",9); map2.put("ccc",1);
  10. //map1-map2
  11. Map<String,Integer> mapDifference= new HashMap<>(map2);
  12. map1.forEach((key,value)->mapDifference.merge(key,value,(v1,v2)->v2-v1));
  13. //打印结果
  14. for (Map.Entry<String, Integer> entry : mapDifference.entrySet()) {
  15. System.out.println(entry.getKey()+ ":" + entry.getValue());
  16. }
  17. }
  18. }
  19. 输出结果如下:aaa:3
  20. ccc:4
  21. bbb:-2

如上输出结果,发现并没有按照添加顺序输出,要想按照添加顺序输出,可以用LinkedHashMap。这一点要特别注意,工作中经常碰到,比如获取一年12个月的某数据,展示到Echart图中,当前端同事将月份写死时,如果后端不注意数据的返回顺序,那前端页面上各个月份的数据就容易出错啦!!!

发表评论

表情:
评论列表 (有 0 条评论,71人围观)

还没有评论,来说两句吧...

相关阅读