<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Lambda的 forEach 慎用,因?yàn)闆](méi)辦法跳出循環(huán)體啊

          共 1244字,需瀏覽 3分鐘

           ·

          2022-08-12 01:35

          點(diǎn)擊上方“Java技術(shù)江湖”,選擇“設(shè)為星標(biāo)

          回復(fù)”666“獲取全網(wǎng)最熱的Java核心知識(shí)點(diǎn)整理


          來(lái)源 | blog.csdn.net/weixin_39597399/article/details/114232746


          01、情景展示

          如上圖所示,我們想要終止for循環(huán),使用return。

          執(zhí)行結(jié)果如下:

          我們可以看到,只有趙六沒(méi)被打印出來(lái),后續(xù)的數(shù)組元素依舊被執(zhí)行了。

          也就是說(shuō),關(guān)鍵字"return",在這里執(zhí)行的效果相當(dāng)于普通for循環(huán)里的關(guān)鍵詞continue"。

          02、原因分析

          我們知道,在普通for循環(huán)里面,想要提前結(jié)束(終止)循環(huán)體使用"break";

          結(jié)束本輪循環(huán),進(jìn)行下一輪循環(huán)使用"continue";

          另外,在普通for里,如果使用"return",不僅強(qiáng)制結(jié)束for循環(huán)體,還會(huì)提前結(jié)束包含這個(gè)循環(huán)體的整個(gè)方法。

          而在Java8中的forEach()中,"break"或"continue"是不被允許使用的,而return的意思也不是原來(lái)return代表的含義了。

          我們來(lái)看看源碼:

          forEach(),說(shuō)到底是一個(gè)方法,而不是循環(huán)體,結(jié)束一個(gè)方法的執(zhí)行用什么?當(dāng)然是return啦;

          java8的forEach()和JavaScript的forEach()用法是何其的相似,感興趣的可以去了解下(在文末)。

          Java不是萬(wàn)能的,不要再吐槽它垃圾了。

          03、解決方案

          方案一:使用原始的foreach循環(huán)

          使用過(guò)eclipse的老鐵們應(yīng)該知道,當(dāng)我們輸入:foreach,再按快捷鍵:Alt+/,就會(huì)出現(xiàn)foreach的代碼提示。

          如上圖所示,這種格式的for循環(huán)才是真正意義上的foreach循環(huán)。

          在idea中輸入,按照上述操作是不會(huì)有任何代碼提示的,那如何才能在idea中,調(diào)出來(lái)呢?

          for循環(huán)可以提前終止。

          方式一:break

          方式二:return(不推薦使用)

          方案二:拋出異常

          我們知道,要想結(jié)束一個(gè)方法的執(zhí)行,正常的邏輯是:使用return;

          但是,在實(shí)際運(yùn)行中,往往有很多不突發(fā)情況導(dǎo)致代碼提前終止,比如:空指針異常,其實(shí),我們也可以通過(guò)拋出假異常的方式來(lái)達(dá)到終止forEach()方法的目的。

          如果覺得這種方式不友好,可以再包裝一層。

          這樣,就完美了。

          這里,需要注意的一點(diǎn)是:要確保你forEach()方法體內(nèi)不能有其它代碼可能會(huì)拋出的異常與自己手動(dòng)拋出并捕獲的異常一樣;

          否則,當(dāng)真正該因異常導(dǎo)致代碼終止的時(shí)候,因?yàn)樵蹅兪謩?dòng)捕獲了并且沒(méi)做任何處理,豈不是搬起石頭砸自己的腳嗎?

          END


          這款 Java 性能調(diào)優(yōu)的可視化工具,你真的會(huì)用嗎?


          牛逼,19.6K Star,堪稱性能監(jiān)控的頂流!


          IntelliJ IDEA,真有你的!


          關(guān)注公眾號(hào)【Java技術(shù)江湖】后回復(fù)“PDF”即可領(lǐng)取200+頁(yè)的《Java工程師面試指南》

          強(qiáng)烈推薦,幾乎涵蓋所有Java工程師必知必會(huì)的知識(shí)點(diǎn),不管是復(fù)習(xí)還是面試,都很實(shí)用。



          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产三级片在线视频 | 黄色一级国产 | sese.av | 亚洲在线小电影 | 婷婷资源|