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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ![](https://cdn.zimug.com/wx-zimug.png) Stream API為我們提供了`Stream.reduce`用來實現集合元素的歸約。reduce函數有三個參數: * *Identity標識*:一個元素,它是歸約操作的初始值,如果流為空,則為默認結果。 * *Accumulator累加器*:具有兩個參數的函數:歸約運算的部分結果和流的下一個元素。 * *Combiner合并器(可選)*:當歸約并行化時,或當累加器參數的類型與累加器實現的類型不匹配時,用于合并歸約操作的部分結果的函數。 ![](https://img.kancloud.cn/bd/76/bd76776778618850781059c2ea5a5c8b_889x538.png) 注意觀察上面的圖,我們先來理解累加器: * 階段累加結果作為累加器的第一個參數 * 集合遍歷元素作為累加器的第二個參數 ## Integer類型歸約 reduce初始值為0,累加器可以是lambda表達式,也可以是方法引用。 ~~~ List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); int result = numbers .stream() .reduce(0, (subtotal, element) -> subtotal + element); System.out.println(result); //21 int result = numbers .stream() .reduce(0, Integer::sum); System.out.println(result); //21 ~~~ ## String類型歸約 不僅可以歸約Integer類型,只要累加器參數類型能夠匹配,可以對任何類型的集合進行歸約計算。 ~~~ List<String> letters = Arrays.asList("a", "b", "c", "d", "e"); String result = letters .stream() .reduce("", (partialString, element) -> partialString + element); System.out.println(result); //abcde String result = letters .stream() .reduce("", String::concat); System.out.println(result); //ancde ~~~ ## 復雜對象歸約 計算所有的員工的年齡總和。 ~~~ Employee e1 = new Employee(1,23,"M","Rick","Beethovan"); Employee e2 = new Employee(2,13,"F","Martina","Hengis"); Employee e3 = new Employee(3,43,"M","Ricky","Martin"); Employee e4 = new Employee(4,26,"M","Jon","Lowman"); Employee e5 = new Employee(5,19,"F","Cristine","Maria"); Employee e6 = new Employee(6,15,"M","David","Feezor"); Employee e7 = new Employee(7,68,"F","Melissa","Roy"); Employee e8 = new Employee(8,79,"M","Alex","Gussin"); Employee e9 = new Employee(9,15,"F","Neetu","Singh"); Employee e10 = new Employee(10,45,"M","Naveen","Jain"); List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10); Integer total = employees.stream().map(Employee::getAge).reduce(0,Integer::sum); System.out.println(total); //346 ~~~ * 先用map將Stream流中的元素由Employee類型處理為Integer類型(age)。 * 然后對Stream流中的Integer類型進行歸約 ## Combiner合并器的使用 除了使用map函數實現類型轉換后的集合歸約,我們還可以用Combiner合并器來實現,這里第一次使用到了Combiner合并器。 因為Stream流中的元素是Employee,累加器的返回值是Integer,所以二者的類型不匹配。這種情況下可以使用Combiner合并器對累加器的結果進行二次歸約,相當于做了類型轉換。 ~~~ Integer total3 = employees.stream() .reduce(0,(totalAge,emp) -> totalAge + emp.getAge(),Integer::sum); //注意這里reduce方法有三個參數 System.out.println(total); //346 ~~~ 計算結果和使用map進行數據類型轉換的方式是一樣的。 ## 并行流數據歸約(使用合并器) 對于大數據量的集合元素歸約計算,更能體現出Stream并行流計算的威力。 ![](https://img.kancloud.cn/77/5d/775d65715a631fe8d39a2861c0a3c94c_1017x563.png) 在進行并行流計算的時候,可能會將集合元素分成多個組計算。為了更快的將分組計算結果累加,可以使用合并器。 ~~~ Integer total2 = employees .parallelStream() .map(Employee::getAge) .reduce(0,Integer::sum,Integer::sum); //注意這里reduce方法有三個參數 System.out.println(total); //346 ~~~
                  <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>

                              哎呀哎呀视频在线观看