<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ![](https://cdn.zimug.com/wx-zimug.png) 在我們對數組或者集合類進行操作的時候,經常會遇到這樣的需求,比如: * 是否包含某一個“匹配規則”的元素 * 是否所有的元素都符合某一個“匹配規則” * 是否所有元素都不符合某一個“匹配規則” * 查找第一個符合“匹配規則”的元素 * 查找任意一個符合“匹配規則”的元素 這些需求如果用for循環去寫的話,還是比較麻煩的,需要使用到for循環和break!本節就介紹一個如何用Stream API來實現“查找與匹配”。 ## 一、對比一下有多簡單 > employees是10個員工對象組成的List,在前面的章節中我們已經用過多次,這里不再列出代碼。 如果我們不用Stream API實現,查找員工列表中是否包含年齡大于70的員工?代碼如下: ~~~ boolean isExistAgeThan70 = false; for(Employee employee:employees){ if(employee.getAge() > 70){ isExistAgeThan70 = true; break; } } ~~~ 如果我們使用Stream API就是下面的一行代碼,其中使用到了我們之前學過的"謂詞邏輯"。 ~~~ boolean isExistAgeThan70 = employees.stream().anyMatch(Employee.ageGreaterThan70); ~~~ 將謂詞邏輯換成lambda表達式也可以,代碼如下: ~~~ boolean isExistAgeThan72 = employees.stream().anyMatch(e -> e.getAge() > 72); ~~~ 所以,我們介紹了第一個匹配規則函數:anyMatch,判斷Stream流中是否包含某一個“匹配規則”的元素。這個匹配規則可以是**lambda表達式**或者**謂詞**。 ## 二、其他匹配規則函數介紹 * 是否所有員工的年齡都大于10歲?allMatch匹配規則函數:判斷是夠Stream流中的所有元素都**符合**某一個"匹配規則"。 ~~~ boolean isExistAgeThan10 = employees.stream().allMatch(e -> e.getAge() > 10); ~~~ * 是否不存在小于18歲的員工?noneMatch匹配規則函數:判斷是否Stream流中的所有元素都**不符合**某一個"匹配規則"。 ~~~ boolean isExistAgeLess18 = employees.stream().noneMatch(e -> e.getAge() < 18); ~~~ ## 三、元素查找與Optional 從列表中按照順序查找第一個年齡大于40的員工。 ~~~ Optional<Employee> employeeOptional = employees.stream().filter(e -> e.getAge() > 40).findFirst(); System.out.println(employeeOptional.get()); ~~~ 打印結果 ~~~ Employee(id=3, age=43, gender=M, firstName=Ricky, lastName=Martin) ~~~ Optional類代表一個值存在或者不存在。在java8中引入,這樣就不用返回null了。 * isPresent() 將在 Optional 包含值的時候返回 true , 否則返回 false 。 * ifPresent(Consumer<T> block) 會在值存在的時候執行給定的代碼塊。我們在第3章 介紹了 Consumer 函數式接口;它讓你傳遞一個接收 T 類型參數,并返回 void 的Lambda 表達式。 * T get() 會在值存在時返回值,否則?出一個 NoSuchElement 異常。 * T orElse(T other) 會在值存在時返回值,否則返回一個默認值。 > 關于Optinal的各種函數用法請觀看視頻![B站觀看地址](https://www.bilibili.com/video/BV1sE411P7C1/) * findFirst用于查找第一個符合“匹配規則”的元素,返回值為Optional * findAny用于查找任意一個符合“匹配規則”的元素,返回值為Optional
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看