map中value統一自增或自減的優雅寫法

2021-09-11 15:03:00 字數 888 閱讀 4168

2019-01-06 一種更優雅的方式 replaceall()

需求:對map中的所有值統一增減

基礎版本

下面這個方式是可行的,但是看著不太優雅

public static void main(string args) 

複製**

誤用版本--merge 有***

經過一番研究之後發現了一種簡單的方式,但是有個限制merge之後不能發生結構性修改(也就是map中元素數量不能發生變化),在當前場景下只要保證merge後不為空值即可

public class mapincr 

}複製**

關鍵就是map.merge(),原始碼如下

default v merge(k key, v value,

objects.requirenonnull(value);

v oldvalue = get(key);

v newvalue = (oldvalue == null) ? value :

if(newvalue == null) else

return newvalue;

}複製**

可以看到如果新值為空就會被移除掉

最佳版本--replaceall

replaceall會對map中的所有元素使用傳遞進來的bifunction進行更新.

public class mapincr 

}複製**

小技巧 自增或自減符號位置

看到別人文章的乙個小技巧,說把自增或自減符號放到前面比放後面會快一點。當然,這是在 i 和 i效果一樣的情況下可以這麼做,我一般是在foreach之後會用到。自己測試一下 start gettimeofday true a 0 for i 0 i 10000000 i echo a echo chr...

Perl中的自增 自減

perl也支援數值型別的自增和自減操作。不僅如此,還支援字元 字串的自增 自減。a 10 以下4句為獨立的自增 自減表示式,自增自減符號的位置無所謂 a 先返回10,再遞增為11 a 先遞增為12,再返回12 a 先遞減為11,再返回11 a 先返回11,再遞減為10 以下4句為非獨立的自增 自減表...

php中mysql自增 MySQL的自增欄位

1.關鍵字 auto increment 2.自增用法 例 create table animals id mediumint not null auto increment,name char 30 not nu 1.關鍵字 auto increment 2.自增用法 例 create table...