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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## [Optional類](https://lingcoder.gitee.io/onjava8/#/book/14-Streams?id=optional%e7%b1%bb) 在我們學習終端操作(Terminal Operations)之前,我們必須考慮如果你在一個空流中獲取元素會發生什么。我們喜歡為了“happy path”而將流連接起來,并假設流不會被中斷。在流中放置`null`是很好的中斷方法。那么是否有某種對象,可作為流元素的持有者,即使查看的元素不存在也能友好地提示我們(也就是說,不會發生異常)? **Optional**可以實現這樣的功能。一些標準流操作返回**Optional**對象,因為它們并不能保證預期結果一定存在。包括: * `findFirst()`返回一個包含第一個元素的**Optional**對象,如果流為空則返回**Optional.empty** * `findAny()`返回包含任意元素的**Optional**對象,如果流為空則返回**Optional.empty** * `max()`和`min()`返回一個包含最大值或者最小值的**Optional**對象,如果流為空則返回**Optional.empty** `reduce()`不再以`identity`形式開頭,而是將其返回值包裝在**Optional**中。(`identity`對象成為其他形式的`reduce()`的默認結果,因此不存在空結果的風險) 對于數字流**IntStream**、**LongStream**和**DoubleStream**,`average()`會將結果包裝在**Optional**以防止流為空。 以下是對空流進行所有這些操作的簡單測試: ~~~ // streams/OptionalsFromEmptyStreams.java import java.util.*; import java.util.stream.*; class OptionalsFromEmptyStreams { public static void main(String[] args) { System.out.println(Stream.<String>empty() .findFirst()); System.out.println(Stream.<String>empty() .findAny()); System.out.println(Stream.<String>empty() .max(String.CASE_INSENSITIVE_ORDER)); System.out.println(Stream.<String>empty() .min(String.CASE_INSENSITIVE_ORDER)); System.out.println(Stream.<String>empty() .reduce((s1, s2) -> s1 + s2)); System.out.println(IntStream.empty() .average()); } } ~~~ 輸出結果: ~~~ Optional.empty Optional.empty Optional.empty Optional.empty Optional.empty OptionalDouble.empty ~~~ 當流為空的時候你會獲得一個**Optional.empty**對象,而不是拋出異常。**Optional**擁有`toString()`方法可以用于展示有用信息。 注意,空流是通過`Stream.<String>empty()`創建的。如果你在沒有任何上下文環境的情況下調用`Stream.empty()`,Java 并不知道它的數據類型;這個語法解決了這個問題。如果編譯器擁有了足夠的上下文信息,比如: ~~~ Stream<String> s = Stream.empty(); ~~~ 就可以在調用`empty()`時推斷類型。 這個示例展示了**Optional**的兩個基本用法: ~~~ // streams/OptionalBasics.java import java.util.*; import java.util.stream.*; class OptionalBasics { static void test(Optional<String> optString) { if(optString.isPresent()) System.out.println(optString.get()); else System.out.println("Nothing inside!"); } public static void main(String[] args) { test(Stream.of("Epithets").findFirst()); test(Stream.<String>empty().findFirst()); } } ~~~ 輸出結果: ~~~ Epithets Nothing inside! ~~~ 當你接收到**Optional**對象時,應首先調用`isPresent()`檢查其中是否包含元素。如果存在,可使用`get()`獲取。
                  <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>

                              哎呀哎呀视频在线观看