这里写自定义目录标题
- 带有 Lambda 表达式的 BigDecimal 求和
- List 中 BigDecimal 求和
- Array 中 BigDecimal 求和
- Map 中 BigDecimal 求和
- 参考文献
在这一页,我们将提供java 8
BigDecimal
求和的例子。
我们将使用lambda
表达式对List
、Map
和Array
的BigDecimal
进行求和。
使用()
方法,我们将BigDecimal
的集合减少到求和。
如果是由BigDecimal
属性组成的实体集合,我们可以使用()
方法来获取BigDecimal
实例的流。
带有 Lambda 表达式的 BigDecimal 求和
为了获得BigDecimal
实例的总和,我们使用Lambda
表达式进行如下操作。
BigDecimal sum = Arrays.stream(bdArray).reduce(BigDecimal.ZERO, (p, q) -> p.add(q));
在上面的代码中我们使用
Stream.reduce(BigDecimal identity, BinaryOperator<BigDecimal> accumulator)
累积器也可以在reduce()方法中以如下方式传递。
BigDecimal sum = list.stream().map(Person::getWeight)
.reduce(BigDecimal.ZERO, BigDecimal::add);
其中add()
是BigDecimal
类的方法。
我们也可以创建自定义的方法进行求和。
例如,我们在自定义类Utility
中创建了addWeight()
方法,该类使用()
方法。
BigDecimal sum = map.values().stream().reduce(BigDecimal.ZERO, Utility::addWeight);
import java.math.BigDecimal;
public class Utility {
public static BigDecimal addWeight(BigDecimal w1, BigDecimal w2) {
return w1.add(w2);
}
}
List 中 BigDecimal 求和
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
public class BigDecimalSumUsingList {
public static void main(String[] args) {
Person p1 = new Person("AAA", new BigDecimal("45.23"));
Person p2 = new Person("BBB", new BigDecimal("55.43"));
Person p3 = new Person("CCC", new BigDecimal("65.21"));
Person p4 = new Person("DDD", new BigDecimal("35.73"));
List<Person> list = Arrays.asList(p1, p2, p3, p4);
BigDecimal sum = list.stream().map(Person::getWeight)
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum);
sum = list.stream().map(p -> p.getWeight())
.reduce(BigDecimal.ZERO, (b1, b2) -> b1.add(b2));
System.out.println(sum);
sum = list.stream().map(Person::getWeight)
.reduce(BigDecimal.ZERO, Utility::addWeight);
System.out.println(sum);
}
}
import java.math.BigDecimal;
public class Person {
private String name;
private BigDecimal weight;
public Person(String name, BigDecimal weight) {
this.name = name;
this.weight = weight;
}
public String getName() {
return name;
}
public BigDecimal getWeight() {
return weight;
}
}
输出
201.60
201.60
201.60
Array 中 BigDecimal 求和
import java.math.BigDecimal;
import java.util.Arrays;
public class BigDecimalSumUsingArray {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("45.23");
BigDecimal b2 = new BigDecimal("55.43");
BigDecimal b3 = new BigDecimal("65.21");
BigDecimal b4 = new BigDecimal("35.73");
BigDecimal[] bdArray = {b1, b2, b3, b4};
BigDecimal sum = Arrays.stream(bdArray).reduce(BigDecimal.ZERO, (p, q) -> p.add(q));
System.out.println(sum);
sum = Arrays.stream(bdArray).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum);
sum = Arrays.stream(bdArray).reduce(BigDecimal.ZERO, Utility::addWeight);
System.out.println(sum);
}
}
输出
201.60
201.60
201.60
Map 中 BigDecimal 求和
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
public class BigDecimalSumUsingMap {
public static void main(String[] args) {
Map<Integer, BigDecimal> map = new HashMap<>();
map.put(1, new BigDecimal("45.23"));
map.put(2, new BigDecimal("55.43"));
map.put(3, new BigDecimal("65.21"));
map.put(4, new BigDecimal("35.73"));
BigDecimal sum = map.values().stream().reduce(BigDecimal.ZERO, (p, q) -> p.add(q));
System.out.println(sum);
sum = map.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum);
sum = map.values().stream().reduce(BigDecimal.ZERO, Utility::addWeight);
System.out.println(sum);
}
}
输出
201.60
201.60
201.60
参考文献
【1】Java 8 BigDecimal Sum Example