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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### [組合](https://lingcoder.gitee.io/onjava8/#/book/14-Streams?id=%e7%bb%84%e5%90%88) * `reduce(BinaryOperator)`:使用**BinaryOperator**來組合所有流中的元素。因為流可能為空,其返回值為**Optional**。 * `reduce(identity, BinaryOperator)`:功能同上,但是使用**identity**作為其組合的初始值。因此如果流為空,**identity**就是結果。 * `reduce(identity, BiFunction, BinaryOperator)`:更復雜的使用形式(暫不介紹),這里把它包含在內,因為它可以提高效率。通常,我們可以顯式地組合`map()`和`reduce()`來更簡單的表達它。 下面來看下`reduce`的代碼示例: ~~~ // streams/Reduce.java import java.util.*; import java.util.stream.*; class Frobnitz { int size; Frobnitz(int sz) { size = sz; } @Override public String toString() { return "Frobnitz(" + size + ")"; } // Generator: static Random rand = new Random(47); static final int BOUND = 100; static Frobnitz supply() { return new Frobnitz(rand.nextInt(BOUND)); } } public class Reduce { public static void main(String[] args) { Stream.generate(Frobnitz::supply) .limit(10) .peek(System.out::println) .reduce((fr0, fr1) -> fr0.size < 50 ? fr0 : fr1) .ifPresent(System.out::println); } } ~~~ 輸出結果: ~~~ Frobnitz(58) Frobnitz(55) Frobnitz(93) Frobnitz(61) Frobnitz(61) Frobnitz(29) Frobnitz(68) Frobnitz(0) Frobnitz(22) Frobnitz(7) Frobnitz(29) ~~~ **Frobnitz**包含一個可生成自身的生成器`supply()`;因為`supply()`方法作為一個`Supplier<Frobnitz>`是簽名兼容的,我們可以把`supply()`作為一個方法引用傳遞給`Stream.generate()`(這種簽名兼容性被稱作結構一致性)。我們使用了沒有“初始值”作為第一個參數的`reduce()`方法,所以產生的結果是**Optional**類型。`Optional.ifPresent()`方法只有在結果非空的時候才會調用`Consumer<Frobnitz>`(`println`方法可以被調用是因為**Frobnitz**可以通過`toString()`方法轉換成**String**)。 Lambda 表達式中的第一個參數`fr0`是`reduce()`中上一次調用的結果。而第二個參數`fr1`是從流傳遞過來的值。 `reduce()`中的 Lambda 表達式使用了三元表達式來獲取結果,當`fr0`的`size`值小于 50 的時候,將`fr0`作為結果,否則將序列中的下一個元素即`fr1`作為結果。當取得第一個`size`值小于 50 的`Frobnitz`,只要得到這個結果就會忽略流中其他元素。這是個非常奇怪的限制, 但也確實讓我們對`reduce()`有了更多的了解。
                  <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>

                              哎呀哎呀视频在线观看