聊聊Java當(dāng)中的一些小技巧
很多時(shí)候,為了方便完成某些功能,大家是挖空心思地去使用一些技巧,讓我們的代碼更直白美觀,下面為大家分享幾個(gè)Java當(dāng)中的技巧。
使用stream實(shí)現(xiàn)list轉(zhuǎn)map
普通:對(duì)于list轉(zhuǎn)map很多時(shí)候大家都使用遍歷,然后取出值,放入結(jié)果中,如下

神技:使用stream實(shí)現(xiàn),通過Collectors.groupingBy

stream有很多非常直觀和好用的方法,例如sum,count,distinct等等
減少非空判斷,優(yōu)雅地使用Objects工具
通常操作的時(shí)候使用!=null去做判斷,比較不優(yōu)雅

jdk1.7提供了Objects工具,使用直觀方便,很多方法中幫我們做了非空判斷,減少!=null的代碼

隨機(jī)數(shù)可以使用種子,保證隨機(jī)規(guī)律
有時(shí)候?yàn)榱吮4嬉粋€(gè)固定的值,往往還需要存數(shù)據(jù)庫或者文件,非常麻煩,我們可以通過特定的值,來通過隨機(jī)數(shù)的種子來計(jì)算特定的值。
例如第二個(gè)print出來的5次循環(huán)的值,必然相等。只需要保證seed的值固定,隨機(jī)數(shù)算出的值必然固定。
雙大括號(hào)語法
很多時(shí)候,需要初始化一些list的數(shù)據(jù),如果像下面操作,會(huì)顯得繁瑣
神技:使用{{}}語法,如下
注意:很多同學(xué)提到此處有問題,不建議程序大量這樣使用,由于該方法是匿名內(nèi)部類初始化方法,會(huì)產(chǎn)生很多xxx$1.class,xxx$2.class……的類,會(huì)存在內(nèi)存泄露問題。
特殊場(chǎng)景需要用到的goto
大家都知道java是沒有g(shù)oto語法的,但提供了類似goto語法效果的方法,如下
try-with-resource自動(dòng)關(guān)閉資源
JVM對(duì)外部資源的引用卻無法自動(dòng)回收,例如數(shù)據(jù)庫連接,網(wǎng)絡(luò)連接以及輸入輸出IO流等,這些連接就需要我們手動(dòng)去關(guān)閉,不然會(huì)導(dǎo)致外部資源泄露,連接池溢出以及文件被異常占用等。
因此在IO操作中,我們常常需要寫如下的代碼,進(jìn)行手動(dòng)釋放資源

jdk1.7給我們提供了try-with-resource語法,讓我們?cè)僖膊挥迷趂inally中調(diào)用close方法了,jvm自動(dòng)調(diào)用。

通過MultiValueMap去構(gòu)建Map
如果需要構(gòu)建Map




















 
 
 


 
 
 
 