Java之stream流求字段累計(jì)和的3種方法總結(jié)
示例對象
首先,假設(shè)你有一個類Person,它有一個age字段:
public class Person { private String name; private int age; // 構(gòu)造函數(shù) public Person(String name, int age) { this.name = name; this.age = age; } // Getter 和 Setter public String getName() { return name; } public int getAge() { return age; } }
方法1:使用mapToInt和sum
如果你想要計(jì)算所有人的年齡總和,可以使用mapToInt將Person對象流轉(zhuǎn)換成年齡的IntStream,然后使用sum方法計(jì)算總和:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35) ); int totalAge = people.stream() .mapToInt(Person::getAge) // 將Person對象轉(zhuǎn)換為int流,提取年齡字段 .sum(); // 計(jì)算總和 System.out.println("Total age: " + totalAge); // 輸出Total age: 90 } }
方法2:使用reduce方法
你也可以使用reduce方法來累加某個字段的值:
int totalAge = people.stream() .map(Person::getAge) // 將Person對象映射為年齡值 .reduce(0, Integer::sum); // 使用reduce方法累加年齡值,初始值為0 System.out.println("Total age: " + totalAge); // 輸出Total age: 90
方法3:使用collect和summingInt(Java 8或更高版本)
int totalAge = people.stream() .collect(Collectors.summingInt(Person::getAge)); // 使用Collectors.summingInt收集器計(jì)算總和 System.out.println("Total age: " + totalAge); // 輸出Total age: 90
以上方法都可以用來計(jì)算一個列表中所有對象的某個字段的累計(jì)和。選擇哪種方法取決于你的具體需求和偏好。通常,使用mapToInt().sum()或collect(Collectors.summingInt())是最直接和高效的方式
附:根據(jù)某個字段的條件篩選并求和(BigDecimal求和)
BigDecimal reduceMorePayAmount = indemnityPayment.getRiPolicyPayeeIndemnitySet().stream() .filter(riPolicyPayeeIndemnity -> riPolicyPayeeIndemnity.getIndemnityType().equals(IndemnityType.MORE_PAY.getValue())) .map(RiPolicyPayeeIndemnity::getFeeAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
總結(jié)
到此這篇關(guān)于Java之stream流求字段累計(jì)和3種方法的文章就介紹到這了,更多相關(guān)Java stream流求字段累計(jì)和內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用JdbcTemplate操作數(shù)據(jù)庫
這篇文章主要介紹了SpringBoot使用JdbcTemplate操作數(shù)據(jù)庫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Java簡單計(jì)時的實(shí)現(xiàn)案例(可以用來限時循環(huán))
這篇文章主要介紹了Java簡單計(jì)時的實(shí)現(xiàn)案例(可以用來限時循環(huán)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java多線程編程中使用Condition類操作鎖的方法詳解
Condition是java.util.concurrent.locks包下的類,提供了對線程鎖的更精細(xì)的控制方法,下面我們就來看一下Java多線程編程中使用Condition類操作鎖的方法詳解2016-07-07Java使用itext生成復(fù)雜數(shù)據(jù)的pdf的示例代碼
Apache iText 是一個開源 Java 庫,支持 PDF 文檔的開發(fā)和轉(zhuǎn)換,在本教程中,我們將學(xué)習(xí)如何使用 iText 開發(fā)可以創(chuàng)建、轉(zhuǎn)換和操作 PDF 文檔的 Java 程序,感興趣的小伙伴跟著小編一起來看看吧2024-12-12java 獲取日期的幾天前,幾個月前和幾年前的實(shí)例
下面小編就為大家?guī)硪黄猨ava 獲取日期的幾天前,幾個月前和幾年前的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10在Spring Boot中實(shí)現(xiàn)文件上傳與管理的操作
在 Spring Boot 中實(shí)現(xiàn)文件上傳與管理非常簡單,通過配置文件上傳、創(chuàng)建文件上傳、下載、列表和刪除接口,我們可以輕松地處理文件操作,結(jié)合前端頁面,可以提供一個完整的文件管理系統(tǒng),這篇文章主要介紹了在Spring Boot中實(shí)現(xiàn)文件上傳與管理,需要的朋友可以參考下2024-07-07Java interrupt()方法使用注意_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java interrupt()方法使用注意_動力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-05-05