oppo软件商店下载官方,湖南正规关键词优化首选,怎么免费制作网站平台,一般网站的宽度是多少像素最近遇到一个需求#xff0c;需要统计各个会员的正在履行合同的合同租金总计#xff0c;以此作为制定会员等级的标准。但是之前这个方法其实是有的#xff0c;只是写的乱七八糟#xff0c;具体的代码就不太方便放上来#xff0c;就说说大致的代码思路吧。 原代码思路是先查… 最近遇到一个需求需要统计各个会员的正在履行合同的合同租金总计以此作为制定会员等级的标准。但是之前这个方法其实是有的只是写的乱七八糟具体的代码就不太方便放上来就说说大致的代码思路吧。 原代码思路是先查询所有履行中合同然后循环取出账单使用HashMap的put方法 将会员唯一标识作为key判断无key先给map.put (memberId, BigDecimal.ZERO) 然后map.put(memberId, map.get(memberId).add(BigDecimal.ZERO)); 有key则map.put(memberId, map.get(memberId).add(查询出的账单总额)); 代码的业务问题就不说了先看看这个累计的实现这样其实是可以实现的就是看起来不是很友好和简洁既要写冗余的if判断还让人读起来很费劲。
HashMap本身就提供了简洁的重复key的数据计算或者采取steam的groupby都可以这里因为偷懒改的时候直接就直接用了HashMap的merge()方法代码就可以这样
map.merge(memberId, 查询出的账单总额, BigDecimal::add); 一行搞定简洁明了如果有不太熟悉这个方法了小伙伴这里也可以简单介绍一下
default V merge(K key, V value,BiFunction? super V, ? super V, ? extends V remappingFunction) {//判断value和remappingFunction都不为空 Objects.requireNonNull(remappingFunction);Objects.requireNonNull(value);//通过key去获取旧值 若无这个key则nullV oldValue get(key);//新值 旧值为null则新值null旧值不为null则新值 remappingFunction.apply(旧值, 新值);V newValue (oldValue null) ? value :remappingFunction.apply(oldValue, value);//判断新值为null的话 if(newValue null) {//移除这个keyremove(key);} else {//不为null的话重新putput(key, newValue);}return newValue;
} 底层实现是这样的该方法接收三个参数一个 key 值一个 value一个 remappingFunction remappingFunction 重新映射函数用于重新计算值得到newValue如果给定的key不存在它就变成了 put(key, value) 。如果 key 已经存在一些值我们 remappingFunction 可以选择合并的方式然后将合并得到的 newValue 赋值给原先的 key。 所以小伙伴们对于新特性和好用的方式方法可以多多了解写起代码来就事半功倍啦。