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/zh-tw/n/283522.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 08:08
下一篇 2024-12-22 08:08

相關推薦

  • Java8Stream優雅操作數據

    Java Stream是Java 8中添加的新特性,它提供了一種全新的、優雅的方式來操作數據集合。這種方式可以讓我們避免使用迭代器等重複性代碼,而是使用更加易於理解和維護的函數式編…

    編程 2024-12-25

發表回復

登錄後才能評論