本文讨论了如何使用流对 BigDecimal 。Java 8的一个重要特征是引入了流功能,以及对数字流进行求和操作的方法,如BigDecimal 。
BigDecimal 对象是不可变的,如String。一旦创建了不可变的对象,它们就不能被修改。因此,当涉及到执行加法、乘法等算术运算时,它们并不友好。
在Java 5/6/7中对BigDecimal求和
让我们回顾一下,在Java 8之前,求和或加法的工作原理是什么。
BigDecimal首先,初始化数据类型为bigDecimalsListList的变量。- 在其中添加一些
BigDecimal的值。 - 创建一个对象
addBigDecimals,以存储BigDecimal值的总和。 - 使用for循环对数组进行迭代
bigDecimalsList。- 调用
add()方法。 - 传递一个新的
BigDecimal对象,该对象由列表中BigDecimal的整数值获得。
- 调用
让我们看看代码。
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class BigDecimalSum{
public static void main(String []args){
List
输出。
15
Java 8中的BigDecimal和
Java 8引入了reduce() 方法,该方法以自己的方式涵盖了终端操作,如sum、min、max、average和count等。
你也可以在reduce() 方法中传递Lambda Expression。在reduce()方法中传递身份和累加器来对一个ArrayList 。
下面给出了reduce() 方法的定义。
T reduce(T identity,
BinaryOperator
你可以在List、Array和Map中使用流。让我们逐一来看看它们。
使用List的BigDecimal求和
你可以通过将每个BigDecimal 作为一个新的列表元素来存储BigDecimal 。要在一个列表中对大十进制进行求和。
- 初始化列表中的
BigDecimal。 - 你可以使用stream().reduce()方法来代替for循环的迭代,并将和保存在一个变量中。
- reduce()方法接受
BigDecimal.ZERO作为标识,接受BigDecimal::add作为累加器。 - 该方法返回总和。
你也可以通过下面的步骤使用lambda表达式求和。
- 将lambda表达式传递给
reduce()方法,将两个变量相加。 reduce()方法返回结果总和。
让我们看看这段代码。
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class BigDecimalSum{
public static void main(String []args){
List
输出。
15
15
使用数组进行大十进制求和
如果BigDecimal ,你可以按照给定的步骤来获取和。
- 将数组传递给Arrays类的
stream()方法。 - 通过传递
BigDecimal.ZERO,和BigDecimal::add来调用reduce()方法。 - 该方法返回总和,存储它,并打印它。
让我们看看这段代码。
import java.math.BigDecimal;
import java.util.Arrays;
public class BigDecimalSum{
public static void main(String []args){
BigDecimal[] bigDecimalsArray = {new BigDecimal("1.6"), new BigDecimal("2"), new
BigDecimal("3.2"), new BigDecimal("4")};
BigDecimal addBigDecimals =
Arrays.stream(bigDecimalsArray).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(addBigDecimals);
}
}
输出。
10.8
使用地图进行大十进制求和
如果你已经将BigDecimal ,你可以按照给定的步骤来获得和。
- 调用地图的
values()方法。 - 将
stream().reduce()方法与values()方法连锁调用。 - 将
BigDecimal.ZERO和BigDecimal::add传递给reduce()方法。 - 该方法返回所有
BigDecimal的值的总和。
让我们看看这个代码。
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
public class BigDecimalSum{
public static void main(String []args){
Map
输出。
11.2
流删除空值
有时BigDecimal 列表中可能包含一个NULL 值,这将引发NullPointerException。你可以在流的帮助下解决这个问题。
让我们看一个例子,一个NULL 的值导致了一个异常。
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class BigDecimalSum{
public static void main(String []args){
List
输出。
线程 "main "中出现异常 java.lang.NullPointerException
使用流,你可以过滤 NULL 值来避免这种类型的异常。filter() 方法接受一个参数并根据该参数过滤元素。
你可以把Objects::nonNull 的过滤器传递给filter() 方法。
让我们看看这个代码。
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class BigDecimalSum{
public static void main(String []args){
List
输出。
10
总结
在这篇文章中,你了解了Java在第8版之前是如何找到BigDecimal 的数字之和的。然后我们发现java 8是如何使用流来寻找BigDecimal 的数字之和的。
流可以与List、Array和Map一起使用,以找到总和。我们可以用流来过滤空值。然而,流也可以应用于其他数据类型。
BigDecimal 以上就是关于如何在Java中使用流求和的全部内容
希望你喜欢阅读这篇文章。请继续关注更多此类文章。
学习愉快!