如何通過 IntelliJ IDEA 來提升 Java8 Stream 的編碼效率


如何通過 IntelliJ IDEA 來提升 Java8 Stream 的編碼效率

本文翻譯整理自:https://winterbe.com/posts/2015/03/05/fixing-java-8-stream-gotchas-with-intellij-idea

作者:@Winterbe
歡迎關注個人微信公眾號: 小哈學Java, 文末分享阿里 P8 資深架構師吐血總結的 《Java 核心知識整理&面試.pdf》資源鏈接!!
個人網站: https://exception.site/java8/java8-improve-stream-byidea-tips

小哈再次推薦一篇 @Winterbe 的譯文,主要是講如何通過 IntelliJ IDEA 來提升 Stream 的編碼效率,算是一個小技巧,經常使用 Java8 Stream 流的小伙伴們,可以試下,能夠提升工作效率哦!

PS: 在閱讀本文前,建議您先閱讀一下小哈的另一篇譯文:《Java8 新特性 Stream 流教程》

目錄

  • 一、Java8 Stream API 的不友好性

  • 二、借助 IntelliJ IDEA 來優化一下

    • 2.1 新建 Stream Live Templates
    • 2.2 順手把其他常用的模板設置一下
  • 三、結語

一、Java8 Stream API 的不友好性

Java8 自 2014 年 3 月發布以來,已經過去很多個年頭了。在我們公司內部,也已逐漸將所有的生產代碼遷移到這個版本。遷移中,我們主要所做的工作就是,將代碼庫更新為 lambda 表達式,Steam 流和新的日期 API。另外,我們還使用 Nashorn 動態編寫那些可能在運行時需要被更改的功能。

除了 lambda 表達式外,最常用的一個功能就是新的 Stream API 了,它可以被用來很方便地操作集合。此外,Stream 還可以很大的提高操作集合代碼的可讀性。

但是,關於 Stream 流, 有一件事真的讓我很困擾!

在使用 Stream 流時,類似reducefindFirst這樣的終端操作,語義都是簡單明了,也很直接,我們無需再額外傳參。

而另一類我們使用比較多的終端操作: collect 用起來就很繁瑣了,如我們要轉換成 List 的時候,我們的寫法一般是這樣的:.collect(Collectors.toList())

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

stringCollection
    .stream()
    .filter(e -> e.startsWith("a"))
    .collect(Collectors.toList());

又比如,我們要轉換成 Set 的時候,需要寫成這樣:.collect(Collectors.toSet()),還有 joininggroupingBy之類。

在我完成對 30 萬行代碼 steam流的遷移后,我總結了一下,toList, toSetgroupingBy 是我們項目目前最常用的終端操作。我無法理解 JDK 的設計者們為什么不對 collect 方法再簡化一下,以讓它更人性化一些,比如同樣的一段代碼,為什么不設計成下面這樣:

stringCollection
    .stream()
    .filter(e -> e.startsWith("a"))
    .toList();

因為沒有設計成這樣,導致我們在代碼中不得不一遍又一遍地使用 Collectors.toXXX, 這就煩躁了。

二、借助 IntelliJ IDEA 來優化一下

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

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

PS: 閱讀此處以了解有關它的更多信息。

哦,就這玩意?

那要怎么通過 Live Templates(實時模板) 來解決前面提到的痛點呢?

2.1 新建 Stream Live Templates

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

新建 Template Group

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

新建 Stream

3.創建完成后,選中 Stream, 新建一個實時模板

新建一個實時模板

4.創建一個 toList 代碼片段模板:

創建一個 toList

注意:代碼片段的上下文選 Java -> other.

5.設置完成后,讓我們在實戰中看下效果吧!

實戰中使用 toList

2.2 順手把其他常用的模板設置一下

除了上面演示的 toList外, toSetgroupingByjoin使用也相當普遍,我們也來設置一下,方法與上面大同小異,這里就不一一貼圖了,貼上代碼片段內容:

// 縮略: .toList
.collect(Collectors.toList());

// 縮略: .toSet
.collect(Collectors.toSet());

// 縮略: .join
.collect(Collectors.joining("$END$"));

// 縮略: .groupBy
.collect(Collectors.groupingBy(e -> $END$));

PS: 特殊變量$END$用來在代碼片段生成后,確定光標位置,這樣你就可以直接輸入相關代碼了,比如,定義 join 連接分隔符等。

模板都創建好了以后,截圖如下:

stream 模板

最后,我們再來看看,joingroupBy 的使用效果圖:

join

groupBy

三、結語

IntelliJ IDEA 中的實時模板是個功能豐富且強大的工具。善用它,可以大大地提高咱們的編碼效率哦。

免費分享 | 面試&學習福利資源

最近在網上發現一個不錯的 PDF 資源《Java 核心知識&面試.pdf》分享給大家,不光是面試,學習,你都值得擁有!!!

獲取方式: 關注公眾號: 小哈學Java, 后台回復資源,既可免費無套路獲取資源鏈接,下面是目錄以及部分截圖:

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦

重要的事情說兩遍,關注公眾號: 小哈學Java, 后台回復資源,既可免費無套路獲取資源鏈接 !!!

歡迎關注微信公眾號: 小哈學Java

關注微信公眾號【小哈學Java】,回復【資源】,即可免費無套路領取資源鏈接哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM