「小得104」大齡程式設計師可能還不知道的Java中的幾個"新"特性
程式碼Review是我工作中的一部分,在這個過程中我發現一個現象,儘管大家很少在使用Java6及以前的版本了,Java8已經是絕對的主流了,但很多人還在用Java6以前的老習慣寫程式碼,其實,現在已經是9102年了,從Java7釋出到現在已經快8年了,從Java8釋出到現在也已經超過5年的時間了,所以這就是我在標題裡給 新 加了引號的原因。
下面管中窺豹,舉幾個小例子。
STREAM - 如何獲取集合中的第一個符合條件的元素
其實,STREAM API的特性還算是被用的比較多的,但還是有很多人拒絕使用,或者部分使用。比如獲取集合中的第一個符合條件的元素改怎麼寫呢?下面是用Stream的方式寫的,是不是很簡潔明瞭?
. .findFirst();
System.out.println("the first is: " + first.get());
輸出 the first is: 8
有人擔心這樣做會影響效能,因為執行了一次filter會來一次迴圈得到一個新集合,然後再執行一次迴圈實現findFirst操作,這麼想,可能是因為按以前for迴圈的思路腦補了一下查詢的過程,其實並不是,我們可以驗證一下:
. .peek(num ->
System.out.println("will filter " + num))
.filter(x -> x > 5)
.findFirst()
.get();
輸出
will filter 2 will filter 8 8
和以前for迴圈找到後break的效果是一樣的。
DATE - 也許你再也不需要一堆DateUtils了
Java8之前,日期和時間的API非常難用,有時候在一個程式碼工程中會看到不只一個DateUtils。Java8引入了新的Date Time API,除了提供了國際化和執行緒安全的支援外,更提供了很多方便好用的方法,基本上你不在需要使用DateUtils了。
感受一下:
LocalDateTime也是一樣的,有很多方便的方法。
之前Date竟然沒有設計成不可變的,一直是Java語言被吐槽的一個地方。現在LocalDate是不可變的,絕對的執行緒安全。而且提供了一系列的with方法,可以輕鬆構建一個新的物件:
輸出
2019-01-07 2019-01-02
另外,不知道你注意到沒有,月份不是從0開始了,是不是人性化了很多?
RANDOM - 如何獲得一個區間內的隨機整數
說實話,上面兩點用的人還是非常多的。那為了湊夠三點,也為了有點新鮮感,說一個很多人不知道的。
突然想到一個詞 :"狗尾續貂"。
如何獲得一個區間內的隨機整數?
這個 ThreadLocalRandom
是在Java7裡引入的。
那在Java7之前是怎麼寫的呢?
是不是新的寫法好理解多了?不過老的寫法有個別的場景下還是有些用的,比如需要指定"種子"的時候。
新的特性會與日俱增,老年程式設計師們堅持漸進增強的學習才能保持不落戶,才能再為祖國程式設計30年。
「小得」是把日常工作中、學習中一些小的技術收穫記錄下來。這是第4篇。