<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>

          面試官:Java8 lambda 表達(dá)式 forEach 如何提前終止?

          共 1214字,需瀏覽 3分鐘

           ·

          2022-05-30 13:54

          你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

          你來,我們一起精進(jìn)!你不來,我和你的競爭對手一起精進(jìn)!

          編輯:業(yè)余草

          blog.csdn.net/weixin_39597399

          推薦:https://www.xttblog.com/?p=5342

          情景展示

          forEach中的 continue

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

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

          forEach中的 continue

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

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

          原因分析

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

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

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

          而在 Java8 中的 forEach() 中 breakcontinue是不被允許使用的,而return的意思也不是原來 return 代表的含義了。

          我們來看看源碼:

          forEach 源碼

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

          java8 的 forEach()和 JavaScript 的 forEach() 用法是何其的相似。

          Java 不是萬能的,不要再吐槽它垃圾了。

          解決方案

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

          Java foreach 循環(huán)

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

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

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

          Java foreach 循環(huán)

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

          方式一:break

          foreach 循環(huán) break

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

          foreach 循環(huán) return

          方案二:拋出異常

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

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

          forEach 拋出異常

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

          forEach 拋出異常進(jìn)行終止

          這樣,就完美了。

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

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

          瀏覽 54
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  婷婷爱五月天 | 激情黄色五月天 | 操逼网页 | 亚洲在线观看免费视频 | 天天一区二区 |