Java8stream求和

一、stream简介

Java8中加入了一个新的包java.util.stream,这个包中包含了一些可以用来支持函数式编程风格的类。这些操作被称为中间操作和最终操作。Stream的中间操作会返回一个新的Stream对象,比如filter、map、sorted等,而最终操作会返回一个结果,比如count、sum、reduce等。使用Stream的好处是可以把数据操作流程化,并且可以对数据进行并行处理。其中求和是Stream对象最常用的操作之一。

二、求和方法

Stream API提供了两种求和方法,分别为sum()和reduce()。

1. sum()方法

IntStream intStream = IntStream.of(1, 2, 3, 4, 5);
int sum = intStream.sum();

sum()方法是IntStream接口提供的一个方法,可以对IntStream对象中的所有元素进行求和。上面的示例代码中,我们首先创建了一个IntStream对象intStream,包含了1、2、3、4、5这5个元素。然后通过调用intStream.sum()方法,对这些元素进行求和,并将结果存储在sum变量中。

2. reduce()方法

Stream stream = Stream.of(1, 2, 3, 4, 5);
int sum = stream.reduce(0, (a, b) -> a + b);

reduce()方法是Stream接口提供的一个方法,可以对Stream对象中的所有元素进行求和。上面的示例代码中,我们首先创建了一个Stream对象stream,包含了1、2、3、4、5这5个元素。然后通过调用stream.reduce()方法,并传入一个初始值0和一个Lambda表达式(a, b) -> a + b作为参数,对这些元素进行求和,并将结果存储在sum变量中。

三、对基本类型求和

Java8的Stream API为基本数据类型提供了特化版本,使其更加高效。我们可以使用IntStream、LongStream、DoubleStream等特化接口来操作int、long、double等基本数据类型。

1. 对IntStream求和

int[] ints = {1, 2, 3, 4, 5};
int sum = Arrays.stream(ints).sum();

使用Arrays类的stream()方法可以将数组转化为Stream。上面的示例代码中,我们首先创建了一个包含了1、2、3、4、5这5个元素的int类型数组ints。然后通过调用Arrays.stream(ints)方法,将其转化为IntStream类型的对象。调用sum()方法对这些元素进行求和,并将结果存储在sum变量中。

2. 对LongStream和DoubleStream求和

long[] longs = {1L, 2L, 3L, 4L, 5L};
long sum = Arrays.stream(longs).sum();
 
double[] doubles = {1.0, 2.0, 3.0, 4.0, 5.0};
double sum = Arrays.stream(doubles).sum();

对于long和double类型的基本数据类型,也可以使用相同的方法进行求和。只需要使用LongStream或者DoubleStream类型的对象即可。

四、对对象求和

如果需要对一个类的某个属性进行求和,可以使用Stream中的mapToInt()方法将对象映射为int类型,并对其进行求和。

示例代码

public class Student {
    private String name;
    private int score;
 
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
 
    public String getName() {
        return name;
    }
 
    public int getScore() {
        return score;
    }
}
 
public class Test {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Tom", 80));
        students.add(new Student("Jack", 90));
        students.add(new Student("Mary", 100));
 
        int sum = students.stream().mapToInt(Student::getScore).sum();
        System.out.println(sum);
    }
}

上面的示例代码中,我们首先创建了一个Student类,包含了name和score两个属性。然后创建了一个List对象students,里面包含了3个Student对象。最后通过调用students.stream().mapToInt(Student::getScore).sum()方法,对students中每个Student对象的score属性进行求和,并将结果存储在sum变量中。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/283522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-22 08:08
下一篇 2024-12-22 08:08

相关推荐

  • Java8Stream优雅操作数据

    Java Stream是Java 8中添加的新特性,它提供了一种全新的、优雅的方式来操作数据集合。这种方式可以让我们避免使用迭代器等重复性代码,而是使用更加易于理解和维护的函数式编…

    编程 2024-12-25

发表回复

登录后才能评论