<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

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

    VSole2022-06-09 16:26:43



    情景展示

    forEach中的 continue

    如上圖所示,我們想要終止 for 循環,使用 return。

    執行結果如下:

    forEach中的 continue

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

    也就是說,關鍵字return,在這里執行的效果相當于普通 for 循環里的關鍵詞continue

    原因分析

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

    結束本輪循環,進行下一輪循環使用continue

    另外,在普通 for 里,如果使用return,不僅強制結束 for 循環體,還會提前結束包含這個循環體的整個方法。

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

    我們來看看源碼:

    forEach 源碼

    forEach(),說到底是一個方法,而不是循環體,結束一個方法的執行用什么?當然是return啦。

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

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

    解決方案

    方案一:使用原始的 foreach 循環

    Java foreach 循環

    使用過 eclipse 的老鐵們應該知道,當我們輸入:foreach,再按快捷鍵:Alt+/,就會出現 foreach 的代碼提示。

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

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

    Java foreach 循環

    for 循環可以提前終止。

    方式一:break

    foreach 循環 break

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

    foreach 循環 return

    方案二:拋出異常

    我們知道,要想結束一個方法的執行,正常的邏輯是:使用 return

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

    forEach 拋出異常

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

    forEach 拋出異常進行終止

    這樣,就完美了。

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

    否則,當真正該因異常導致代碼終止的時候,因為咱們手動捕獲了并且沒做任何處理,豈不是搬起石頭砸自己的腳嗎?

    lambdacontinue
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    情景展示 原因分析 解決方案 情景展示如上圖所示,我們想要終止 for 循環,使用 return。 執行結果如下:
    某視頻app的學習記錄
    2022-01-03 16:58:52
    這個看見有人說有個版本開始不能截了,我這邊一直都是換證書的,沒感覺有影響,估計我下的是盜版,碰到再看了。先新建一個自己的測試app,接著的工作就是搬代碼了,直接導出所有的反編譯代碼
    Playwright 入門教程
    2023-09-14 10:09:59
    Playwright 入門教程
    house of force 主要利用 top chunk 的漏洞 通過修改topchunk_size來進行攻擊 利用 top chunk 分割的漏洞來申請任意 chunk, 然后再劫持 hook 或者更改 got表
    chatgpt可以很好的解決通用型問題,但是對于垂直專業領域的問題還不夠好,應該還需要再進行訓練。之前發過一
    EventID=4624,從安全日志中獲取登錄成功的客戶端登錄ip、登錄源端口、登錄時間等信息
    0x00 日常查殼無殼64位0x01 CFGGETC在講這題ollvm與異常處理之前,有必要先搞懂我們到底是怎么輸入的。一共有三處getc處理我們第一段輸入的地方。程序最先開始運行的是 407629,這里我們可以輸入上下左右箭頭與特定的數字。隨后到 40553A 讀取為5B。
    強網杯-WriteUp
    2022-08-02 08:02:30
    然后使用 admin/123登錄管理員賬戶即可,登錄后存在購買頁面,經過測試,使用如下 payload 可以繞過檢查,再訪問主頁面即可獲得 flag
    WAF指紋識別工具
    2022-04-11 06:18:47
    原理發送正常的 HTTP 請求并分析響應;這確定了許多 WAF 解決方案。如果不成功,則發送多個HTTP 請求,并使用簡單的邏輯來示例就是WAF。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类