<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 表達式 forEach 如何提前終止?

          共 1378字,需瀏覽 3分鐘

           ·

          2022-07-31 15:12

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
          關(guān)注


          閱讀本文大概需要 2.8 分鐘。
          來自:blog.csdn.net/weixin_39597399/article/details/114232746

          1.情景展示

          如上圖所示,我們想要終止for循環(huán),使用return。
          執(zhí)行結(jié)果如下:

          我們可以看到,只有趙六沒被打印出來,后續(xù)的數(shù)組元素依舊被執(zhí)行了。
          也就是說,關(guān)鍵字"return",在這里執(zhí)行的效果相當(dāng)于普通for循環(huán)里的關(guān)鍵詞continue"。

          2.原因分析

          我們知道,在普通for循環(huán)里面,想要提前結(jié)束(終止)循環(huán)體使用"break";
          結(jié)束本輪循環(huán),進行下一輪循環(huán)使用"continue";
          另外,在普通for里,如果使用"return",不僅強制結(jié)束for循環(huán)體,還會提前結(jié)束包含這個循環(huán)體的整個方法。
          而在Java8中的forEach()中,"break"或"continue"是不被允許使用的,而return的意思也不是原來return代表的含義了。
          我們來看看源碼:

          forEach(),說到底是一個方法,而不是循環(huán)體,結(jié)束一個方法的執(zhí)行用什么?當(dāng)然是return啦;
          java8的forEach()和JavaScript的forEach()用法是何其的相似,感興趣的可以去了解下(在文末)。
          Java不是萬能的,不要再吐槽它垃圾了。

          3.解決方案

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

          使用過eclipse的老鐵們應(yīng)該知道,當(dāng)我們輸入:foreach,再按快捷鍵:Alt+/,就會出現(xiàn)foreach的代碼提示。
          如上圖所示,這種格式的for循環(huán)才是真正意義上的foreach循環(huán)。
          在idea中輸入,按照上述操作是不會有任何代碼提示的,那如何才能在idea中,調(diào)出來呢?

          for循環(huán)可以提前終止。
          方式一:break

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

          方案二:拋出異常

          我們知道,要想結(jié)束一個方法的執(zhí)行,正常的邏輯是:使用return;
          但是,在實際運行中,往往有很多不突發(fā)情況導(dǎo)致代碼提前終止,比如:空指針異常,其實,我們也可以通過拋出假異常的方式來達到終止forEach()方法的目的。

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

          這樣,就完美了。
          這里,需要注意的一點是:要確保你forEach()方法體內(nèi)不能有其它代碼可能會拋出的異常與自己手動拋出并捕獲的異常一樣;
          否則,當(dāng)真正該因異常導(dǎo)致代碼終止的時候,因為咱們手動捕獲了并且沒做任何處理,豈不是搬起石頭砸自己的腳嗎?
          <END>

          推薦閱讀:

          Spring Event,賊好用的業(yè)務(wù)解耦神器!

          JWT 實現(xiàn)登錄認證 + Token 自動續(xù)期方案,這才是正確的使用姿勢!

          互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

          內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!

          ?戳閱讀原文領(lǐng)?。?/span>                                  朕已閱 

          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  六月婷婷综合中文字幕 | 日韩欧美一级中文字幕 | 日韩一区高清 | 亚洲精品一级二级三级 | 伊人大香蕉视频在线观看 |