成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Intellij IDEA 解決Java8的數(shù)據(jù)流問(wèn)題

dreamGong / 3595人閱讀

摘要:使用解決的數(shù)據(jù)流問(wèn)題原文譯者飛龍協(xié)議在年三月發(fā)布,距離現(xiàn)在年三月五號(hào)快有一年了。除了,最實(shí)用的特性是新的數(shù)據(jù)流。是吧,注是瀏覽器上的數(shù)據(jù)流的接口,并解決了上述問(wèn)題。

使用Intellij IDEA 解決Java8的數(shù)據(jù)流問(wèn)題

原文:Fixing Java 8 Stream Gotchas with IntelliJ IDEA

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

Java8在2014年三月發(fā)布,距離現(xiàn)在(2015年三月五號(hào))快有一年了。我們打算將Pondus的所有生產(chǎn)服務(wù)器升級(jí)到這一新版本。從那時(shí)起,我們將大部分代碼庫(kù)遷移到lambda表達(dá)式、數(shù)據(jù)流和新的日期API上。我們也會(huì)使用Nashorn來(lái)把我們的應(yīng)用中運(yùn)行時(shí)發(fā)生改變的部分變成動(dòng)態(tài)腳本。

除了lambda,最實(shí)用的特性是新的數(shù)據(jù)流API。集合操作在任何我見(jiàn)過(guò)的代碼庫(kù)中都隨處可見(jiàn)。而且對(duì)于那些集合操作,數(shù)據(jù)流是提升代碼可讀性的好方法。

但是一件關(guān)于數(shù)據(jù)流的事情十分令我困擾:數(shù)據(jù)流只提供了幾個(gè)終止操作,例如reducefindFirst屬于直接操作,其它的只能通過(guò)collect來(lái)訪問(wèn)。工具類Collctors提供了一些便利的收集器,例如toList、toSet、joininggroupingBy

例如,下面的代碼對(duì)一個(gè)字符串集合進(jìn)行過(guò)濾,并創(chuàng)建新的列表:

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

在遷移了300k行代碼到數(shù)據(jù)流之后,我可以說(shuō),toList、toSet、和groupingBy是你的項(xiàng)目中最常用的終止操作。所以我不能理解為什么不把這些方法直接集成到Stream接口上面,這樣你就可以直接編寫(xiě):

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

這在開(kāi)始看起來(lái)是個(gè)小缺陷,但是如果你需要一遍又一遍地編寫(xiě)這些代碼,它會(huì)非常煩人。

toArray()方法但是沒(méi)有toList(),所以我真心希望一些便利的收集器可以在Java9中這樣添加到Stream接口中。是吧,Brian??_?

注:Stream.js是瀏覽器上的Java 8 數(shù)據(jù)流API的JavaScript接口,并解決了上述問(wèn)題。所有重要的終止操作都可以直接在流上訪問(wèn),十分方便。詳情請(qǐng)見(jiàn)API文檔。

無(wú)論如何,IntelliJ IDEA聲稱它是最智能的Java IDE。所以讓我們看看如何使用IDEA來(lái)解決這一問(wèn)題。

使用 IntelliJ IDEA 來(lái)幫忙

IntelliJ IDEA自帶了一個(gè)便利的特性,叫做實(shí)時(shí)模板(Live Template)。如果你還不知道它是什么:實(shí)時(shí)模板是一些常用代碼段的快捷方式。例如,你鍵入sout并按下TAB鍵,IDEA就會(huì)插入代碼段System.out.println()。更多信息請(qǐng)見(jiàn)這里。

如何用實(shí)時(shí)模板來(lái)解決上述問(wèn)題?實(shí)際上我們只需要為所有普遍使用的默認(rèn)數(shù)據(jù)流收集器創(chuàng)建我們自己的實(shí)時(shí)模板。例如,我們可以創(chuàng)建.toList縮寫(xiě)的實(shí)時(shí)模板,來(lái)自動(dòng)插入適當(dāng)?shù)氖占?b>.collect(Collectors.toList())。

下面是它在實(shí)際工作中的樣子:

構(gòu)建你自己的實(shí)時(shí)模板

讓我們看看如何自己構(gòu)建它。首先訪問(wèn)設(shè)置(Settings)并在左側(cè)的菜單中選擇實(shí)時(shí)模板。你也可以使用對(duì)話框左上角的便利的輸入過(guò)濾。

下面我們可以通過(guò)右側(cè)的+圖標(biāo)創(chuàng)建一個(gè)新的組,叫做Stream。接下來(lái)我們向組中添加所有數(shù)據(jù)流相關(guān)的實(shí)時(shí)模板。我經(jīng)常使用默認(rèn)的收集器toList、toSet、groupingByjoin,所以我為每個(gè)這些方法都創(chuàng)建了新的實(shí)時(shí)模板。

這一步非常重要。在添加新的實(shí)時(shí)模板之后,你需要在對(duì)話框底部指定合適的上下文。你需要選擇Java → Other,然后定義縮寫(xiě)、描述和實(shí)際的模板代碼。

// Abbreviation: .toList
.collect(Collectors.toList())

// Abbreviation: .toSet
.collect(Collectors.toSet())

// Abbreviation: .join
.collect(Collectors.joining("$END$"))

// Abbreviation: .groupBy
.collect(Collectors.groupingBy(e -> $END$))

特殊的變量$END$指定在使用模板之后的光標(biāo)位置,所以你可以直接在這個(gè)位置上打字,例如,定義連接分隔符。

提示:你應(yīng)該開(kāi)啟"Add unambiguous imports on the fly"(自動(dòng)添加明確的導(dǎo)入)選項(xiàng),便于讓IDEA自動(dòng)添加java.util.stream.Collectors的導(dǎo)入語(yǔ)句。選項(xiàng)在Editor → General → Auto Import中。

讓我們?cè)趯?shí)際工作中看看這兩個(gè)模板:

連接

分組

Intellij IDEA中的實(shí)時(shí)模板非常靈活且強(qiáng)大。你可以用它來(lái)極大提升代碼的生產(chǎn)力。你知道實(shí)時(shí)模板可以拯救生活的其它例子嗎?請(qǐng)讓我知道!

仍然不滿意嗎?在我的數(shù)據(jù)流教程中學(xué)習(xí)所有你想要學(xué)到的東西。

祝編程愉快!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64967.html

相關(guān)文章

  • 事件派發(fā)器模式

    摘要:在項(xiàng)目開(kāi)發(fā)中,會(huì)遇到如下情形我們自己的服務(wù)訂閱接收來(lái)自消息隊(duì)列或者客戶端的事件和請(qǐng)求,基于不同的事件采取對(duì)應(yīng)的行動(dòng),這種情況下適合應(yīng)用派發(fā)器模式。 在項(xiàng)目開(kāi)發(fā)中,會(huì)遇到如下情形:我們自己的服務(wù)訂閱、接收來(lái)自消息隊(duì)列或者客戶端的事件和請(qǐng)求,基于不同的事件采取對(duì)應(yīng)的行動(dòng),這種情況下適合應(yīng)用派發(fā)器模式。 主要模塊 XXXEventDispatcher類核心類,維護(hù)事件類型(EventType...

    Yujiaao 評(píng)論0 收藏0
  • IntelliJ IDEA 2017.1 EAP與異步堆棧跟蹤調(diào)試器擴(kuò)展

    摘要:帶有一個(gè)新的調(diào)試器捕獲這改變了堆棧跟蹤相關(guān)各部分用異步代碼執(zhí)行接收器與相應(yīng)地區(qū)的堆棧跟蹤捕獲的異步代碼傳遞發(fā)送方。 反應(yīng)性編程趨勢(shì)后,我們的代碼越來(lái)越異步。 showImg(https://cscdn.maxleap.cn/2.0/download/NTZmMGQ0NzdhNWZmN2YwMDAxZWJlMjg1/zcf-1eb1a6d0-09be-4382-ad89-8c640cc4...

    趙春朋 評(píng)論0 收藏0
  • JAVA語(yǔ)法糖和語(yǔ)法糖編譯

    摘要:提供給了用戶大量的語(yǔ)法糖,比如泛型自動(dòng)裝箱拆箱循環(huán)變長(zhǎng)參數(shù)內(nèi)部類枚舉類斷言新特性方法引用等解語(yǔ)法糖語(yǔ)法糖的存在主要是方便開(kāi)發(fā)人員使用。 首先,部分總結(jié)文字引用 簡(jiǎn)書(shū)作者:Eric新之助 。鏈接:https://www.jianshu.com/p/4de08deb6ba4 已獲得授權(quán) showImg(https://segmentfault.com/img/bVbfuX9?w=646&...

    weakish 評(píng)論0 收藏0
  • IntelliJ IDEA 16預(yù)覽版更新內(nèi)容說(shuō)明

    摘要:線程過(guò)去,跨過(guò)一個(gè)線程意味著要恢復(fù)所有的其他線程,而版開(kāi)始只需要恢復(fù)當(dāng)前線程即可??焖偎阉餍掳姹靖倪M(jìn)了快速搜索的彈出菜單,會(huì)將搜索項(xiàng)高亮顯示。終于新增支持。 調(diào)試器 Groovy表達(dá)式 從16版開(kāi)始,Evaluate Expression 和 Watches可以使用更短且更具表現(xiàn)力的Groovy表達(dá)式進(jìn)行調(diào)試,而Groovy表達(dá)式以前只能用于Groovy代碼。 線程 過(guò)去,跨過(guò)一個(gè)線程...

    iKcamp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<