国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java8 利用reduce實現將列表中的多個元素的屬性求和并返回操作

java8 利用reduce實現將列表中的多個元素的屬性求和并返回操作

2020-08-17 12:11東陸之滇 Java教程

這篇文章主要介紹了java8 利用reduce實現將列表中的多個元素的屬性求和并返回操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

利用java8流的特性,我們可以實現list中多個元素的 屬性求和 并返回。

案例:

有一個借款待還信息列表,其中每一個借款合同包括:本金、手續費;

現在欲將 所有的本金求和、所有的手續費求和。

我們可以使用java8中的函數式編程,獲取list的流,再利用reduce遍歷遞減方式將同屬性(本金、手續費)求和賦予給一個新的list中同類型的對象實例,即得到我們需要的結果:

?
1
2
3
4
A a = list.stream()
        .reduce(
            (x , y) -> new A( (x.getPrincipal() + y.getPrincipal()), (x.getFee() + y.getFee()) ) )
        .orElse( new A(0, 0) );

示例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package org.byron4j.eight;
 
import java.util.ArrayList;
import java.util.List;
 
import org.junit.Test;
 
public class ReduceTwoObjectAddProp {
 
 
  class A{
    int principal = 0;
    int fee = 0;
    public A(int principal, int fee) {
      super();
      this.principal = principal;
      this.fee = fee;
    }
    public A() {
      super();
      // TODO Auto-generated constructor stub
    }
    public int getPrincipal() {
      return principal;
    }
    public void setPrincipal(int principal) {
      this.principal = principal;
    }
    public int getFee() {
      return fee;
    }
    public void setFee(int fee) {
      this.fee = fee;
    }
    @Override
    public String toString() {
      return "A [principal=" + principal + ", fee=" + fee + "]";
    }
 
  }
 
 
  @Test
  public void test() {
 
 
    List<A> list = new ArrayList<A>();
    list.add(new A(1, 2));
    list.add(new A(100, 200));
 
    A a = list.stream()
        .reduce(
            (x , y) -> new A( (x.getPrincipal() + y.getPrincipal()), (x.getFee() + y.getFee()) ) )
        .orElse( new A(0, 0) );
    System.out.println(a);
  }
 
}

補充知識:在 Java 8 中如何使用 Stream.reduce() 對 BigDecimal 的列表求和?

在Java 8中,我們可以使用Stream.reduce()對BigDecimal的列表求和。

1. Stream.reduce()

Java示例,使用常規的for循環和stream.reduce()對BigDecimal值列表求和。

JavaBigDecimal.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.mkyong;
 
import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.List;
 
public class JavaBigDecimal {
 
  public static void main(String[] args) {
 
    List<BigDecimal> invoices = new LinkedList<>();
    invoices.add(BigDecimal.valueOf(9.9));
    invoices.add(BigDecimal.valueOf(1.0));
    invoices.add(BigDecimal.valueOf(19.99));
    invoices.add(BigDecimal.valueOf(0.2));
    invoices.add(BigDecimal.valueOf(5.5));
 
    // sum using a for loop
    BigDecimal sum = BigDecimal.ZERO;
    for (BigDecimal amt : invoices) {
      sum = sum.add(amt);
    }
    System.out.println("Sum = " + sum);
 
    // sum using stream
    BigDecimal sum2 = invoices.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
    System.out.println("Sum (Stream) = " + sum2);
 
  }
 
}

輸出量

Sum = 36.59

Sum (Stream) = 36.59

2.地圖和縮小

BigDecimal Invoices清單中的所有BigDecimal 。

JavaBigDecimalObject.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.mkyong;
 
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List;
 
public class JavaBigDecimalObject {
 
  public static void main(String[] args) {
 
    List<Invoice> invoices = Arrays.asList(
        new Invoice("I1001", BigDecimal.valueOf(9.99), BigDecimal.valueOf(1)),
        new Invoice("I1002", BigDecimal.valueOf(19.99), BigDecimal.valueOf(1.5)),
        new Invoice("I1003", BigDecimal.valueOf(4.888), BigDecimal.valueOf(2)),
        new Invoice("I1004", BigDecimal.valueOf(4.99), BigDecimal.valueOf(5)),
        new Invoice("I1005", BigDecimal.valueOf(.5), BigDecimal.valueOf(2.3))
    );
 
    BigDecimal sum = invoices.stream()
        .map(x -> x.getQty().multiply(x.getPrice()))  // map
        .reduce(BigDecimal.ZERO, BigDecimal::add);   // reduce
 
    System.out.println(sum);  // 75.851
    System.out.println(sum.setScale(2, RoundingMode.HALF_UP)); // 75.85
 
  }
}
 
class Invoice {
 
  String invoiceNo;
  BigDecimal price;
  BigDecimal qty;
 
  public Invoice(String invoiceNo, BigDecimal price, BigDecimal qty) {
    this.invoiceNo = invoiceNo;
    this.price = price;
    this.qty = qty;
  }
 
  public String getInvoiceNo() {
    return invoiceNo;
  }
 
  public void setInvoiceNo(String invoiceNo) {
    this.invoiceNo = invoiceNo;
  }
 
  public BigDecimal getPrice() {
    return price;
  }
 
  public void setPrice(BigDecimal price) {
    this.price = price;
  }
 
  public BigDecimal getQty() {
    return qty;
  }
 
  public void setQty(BigDecimal qty) {
    this.qty = qty;
  }
}

輸出量

75.851

75.85

以上這篇java8 利用reduce實現將列表中的多個元素的屬性求和并返回操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/zixiao217/article/details/80673897

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线亚洲一区 | 国产精品久久久久久久 | 精品欧美一区二区三区久久久 | 免费黄色观看 | 黄色免费在线观看 | 亚洲成人免费 | 久久精品电影网 | 国产在线精品一区二区 | 91精品国产综合久久婷婷香蕉 | 日韩毛片免费在线观看 | 老熟妇午夜毛片一区二区三区 | 国产小视频自拍 | 一区二区三区在线 | 欧美福利电影在线观看 | 日韩视频一区二区 | 蜜桃视频网站入口 | 看日韩毛片 | 国产不卡一区 | 日本精品久久 | 国产在线一区二区三区 | 成人午夜 | 欧美日韩高清 | av高清在线看 | 国产精品久久av | 91最新| 精品一区二区三区免费 | 亚洲一区二区三区在线播放 | 国产精品ssss在线亚洲 | 免费在线观看黄视频 | 日韩成人| 国产精品一区欧美 | 国产精品高清在线观看 | 国产精品久久久久久久久久东京 | 欧美精品在线看 | 男人的天堂在线视频 | 日韩av在线免费 | av国产精品 | 亚洲综合色视频在线观看 | 紧缚调教一区二区三区视频 | 婷婷激情久久 | 国产亚洲欧美一区 |