Java8 Stream很差用?如何經過 IntelliJ IDEA 提高擼碼效率

目錄優化

Java8 Stream API 的不友好性
藉助 IntelliJ IDEA 來優化一下
2.1 新建 Stream Live Templates
2.2 順手把其餘經常使用的模板設置一下
Java8 Stream API 的不友好性spa

Java8 自 2014 年 3 月發佈以來,已通過去不少個年頭了。在公司內部也已逐漸將全部的生產代碼遷移到這個版本。遷移中主要所作的工做就是將代碼庫更新爲 lambda 表達式,Stream 流和新的日期 API。另外還使用 Nashorn 動態編寫那些可能在運行時須要被更改的功能。設計

除了 lambda 表達式外,最經常使用的一個功能就是新的 Stream API 了,它能夠被用來很方便地操做集合。此外,Stream 還能夠很大的提升集合操做相關代碼的可讀性。ip

可是,關於 Stream 流, 有一件事真的讓我很困擾!字符串

在使用 Stream 流時,相似 reduce和 findFirst這樣的終端操做,語義都是簡單明瞭,也很直接,咱們無需再額外傳參。it

而另外一類咱們使用比較多的終端操做: collect 用起來就很繁瑣了,如咱們要轉換成 List 的時候,咱們的寫法通常是這樣的: .collect(Collectors.toList())。模板

例如,下面這段代碼對字符串集合進行過濾,並轉成一個新的集合:class

clipboard.png

又好比,咱們要轉換成 Set 的時候,須要寫成這樣: .collect(Collectors.toSet()),還有 joining 和 groupingBy之類。變量

在我完成對 30 萬行代碼 steam流的遷移後,我總結了一下, toList, toSet 和 groupingBy 是咱們項目目前最經常使用的終端操做。我沒法理解 JDK 的設計者們爲何不對 collect 方法再簡化一下,以讓它更人性化一些,好比一樣的一段代碼,爲何不設計成下面這樣:cli

clipboard.png
由於沒有設計成這樣,致使咱們在代碼中不得不一遍又一遍地使用 Collectors.toXXX, 這就煩躁了。

藉助IDEA優化一下

IntelliJ IDEA 號稱宇宙最智能 Java IDE, 看看咱們如何經過它來解決這個愁人的問題。

IntelliJ IDEA 附帶了一個名爲 LiveTemplates(實時模板) 的便捷功能。這是個啥玩意?即便您還不知道它是什麼, 可是你也必定常常使用到它。好比輸入經常使用代碼段的快捷方式 sout,IDEA 會插入代碼段 System.out.println()。又好比,輸入 psvm, IDEA 會快速幫您生成 main 方法等。

clipboard.png

哦,就這玩意?

那要怎麼經過 LiveTemplates(實時模板) 來解決前面提到的痛點呢?

1 新建 Stream Live Templates

1.按步驟打開 File -> Setting -> Editor -> LiveTemplates:

clipboard.png

2.新建一個 Template Group , 取名爲 Stream:

clipboard.png

3.建立完成後,選中 Stream, 新建一個實時模板:

clipboard.png

4.建立一個 toList 代碼片斷模板:

clipboard.png
注意:代碼片斷的上下文選 Java->other.
5.設置完成後,讓咱們在實戰中看下效果吧!

clipboard.png
2 順手把其餘經常使用的模板設置一下

除了上面演示的 toList外, toSet, groupingBy和 join使用也至關廣泛,咱們也來設置一下,方法與上面大同小異,這裏就不一一貼圖了,貼上代碼片斷內容:

// 縮略: .toList
.collect(
Collectors
.toList());
// 縮略: .toSet
.collect(
Collectors
.toSet());
// 縮略: .join
.collect(
Collectors
.joining(
"$END$"
));
// 縮略: .groupBy
.collect(
Collectors
.groupingBy(e -> $END$));

PS: 特殊變量 $END$用來在代碼片斷生成後,肯定光標位置,這樣你就能夠直接輸入相關代碼了,好比,定義 join 鏈接分隔符等。
模板都建立好了之後,截圖以下:

clipboard.png
最後,咱們再來看看, join 和 groupBy 的使用效果圖:

clipboard.png

clipboard.png

相關文章
相關標籤/搜索