如何在Java中使用流计算BigDecimal的总和

1,055 阅读4分钟

本文讨论了如何使用流对 BigDecimal 。Java 8的一个重要特征是引入了流功能,以及对数字流进行求和操作的方法,如BigDecimal

BigDecimal 对象是不可变的,如String。一旦创建了不可变的对象,它们就不能被修改。因此,当涉及到执行加法、乘法等算术运算时,它们并不友好。

在Java 5/6/7中对BigDecimal求和

让我们回顾一下,在Java 8之前,求和或加法的工作原理是什么。

  • BigDecimal 首先,初始化数据类型为bigDecimalsList List的变量。
  • 在其中添加一些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.ZEROBigDecimal::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中使用流求和的全部内容
希望你喜欢阅读这篇文章。请继续关注更多此类文章。

学习愉快!