如何用Stream解决两层List属性求和问题

 更新时间:2023年05月29日 14:21:00   作者:CizelTian  
这篇文章主要介绍了如何用Stream解决两层List属性求和问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

用Stream解决两层List属性求和

假设一个人有很多个银行账户,每个银行账户中存有不同金额的存款,那么我们如何用Stream求一组人的所有存款呢?

首先,我们来建立一下所需的对象。

//账户对象
public class Account {
    //账号
    private String accountNumber;
    //余额
    private Integer balance;
    public Account() {
    }
    public Account(String accountNumber, Integer balance) {
        this.accountNumber = accountNumber;
        this.balance = balance;
    }
    public String getAccountNumber() {
        return accountNumber;
    }
    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }
    public Integer getBalance() {
        return balance;
    }
    public void setBalance(Integer balance) {
        this.balance = balance;
    }
}
//人对象
public class Person {
    private String name;
    private Integer age;
    //账户列表
    private List<Account> accounts;
    public Person() {
    }
    public Person(String name, Integer age, List<Account> accounts) {
        this.name = name;
        this.age = age;
        this.accounts = accounts;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public List<Account> getAccounts() {
        return accounts;
    }
    public void setAccounts(List<Account> accounts) {
        this.accounts = accounts;
    }
}

建立用Stream流计算账户总余额的代码

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class Sum {
    public static void main(String[] args) {
        //生成包含四个账户的账户列表
        List<Account> accounts1 = new ArrayList<>();
        Account account1 = new Account("0001",100);
        Account account2 = new Account("0001",200);
        Account account3 = new Account("0001",300);
        Account account4 = new Account("0001",400);
        accounts1.add(account1);
        accounts1.add(account2);
        accounts1.add(account3);
        accounts1.add(account4);
        //生成一个名为“zs“的人对象
        Person person1 = new Person("zs",20,accounts1);
        //生成包含三个账户的账户列表
        List<Account> accounts2 = new ArrayList<>();
        Account account5 = new Account("0001",500);
        Account account6 = new Account("0001",600);
        Account account7 = new Account("0001",700);
        accounts2.add(account5);
        accounts2.add(account6);
        accounts2.add(account7);
        //生成一个”ls“的人对象
        Person person2 = new Person("ls",30,accounts2);
        //生成人列表
        List<Person> persons = new ArrayList<>();
        persons.add(person1);
        persons.add(person2);
        //计算总金额
        Integer sum = persons.stream().map(Person::getAccounts).flatMap(Collection::stream).map(Account::getBalance).reduce(0,Integer::sum);
        System.out.println(sum);
    }
}

其中flatMap是把两个List<Account>合并为一个List,方便后续计算总额

stream计算一个List对象中某个字段总和

int total = list.stream().mapToInt(User::getAge).sum();

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java中redis增删查以及清理缓存的案例

    java中redis增删查以及清理缓存的案例

    这篇文章主要介绍了java中redis增删查以及清理缓存的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java将时间按月份分段的实现思路与方法

    Java将时间按月份分段的实现思路与方法

    这篇文章主要给大家介绍了关于Java将时间按月份分段的实现思路与方法,通过文中介绍的方法可以将时间分成我们想要的时间段,文中给出了详细的实例代码,需要的朋友可以参考下
    2021-07-07
  • Java中List分片的5种方法小结

    Java中List分片的5种方法小结

    本文主要介绍了Java中List分片的5种方法小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • java 生成有序账号的实现方法

    java 生成有序账号的实现方法

    下面小编就为大家带来一篇java 生成有序账号的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java调用新浪api通过Ip查询地区

    Java调用新浪api通过Ip查询地区

    这篇文章主要介绍了Java调用新浪接口通过Ip查询地区,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java线程池实现原理详解

    Java线程池实现原理详解

    在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源,在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收,本文将对Java线程池实现原理进行详细介绍,需要的朋友可以参考下
    2023-07-07
  • 关于spring data jpa 模糊查询like的坑点

    关于spring data jpa 模糊查询like的坑点

    这篇文章主要介绍了关于spring data jpa 模糊查询like的坑点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Boot 多环境配置Maven Profile vs 启动参数注入深入解析

    Spring Boot 多环境配置Maven Profile vs 启

    本文介绍了在Java项目开发和部署中使用多环境配置的方法,比较了两种主要方式:MavenProfile方式和启动参数方式,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • 如何简单的理解依赖注入详解

    如何简单的理解依赖注入详解

    一直对依赖注入理解不清楚,最近突然理解了,所以下面这篇文章主要给大家介绍了关于如何简单的理解依赖注入的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • 基于JPA的Repository使用详解

    基于JPA的Repository使用详解

    这篇文章主要介绍了JPA的Repository使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论