对象列表中的int之和

时间:2015-09-18 11:09:26

标签: java java-8

我有一个课程如下

class Account{
    String Name;
    int amount;
}

如果我的列表为List<Account>,那么如何在不使用forforeach等任何循环的情况下从此列表中获取总金额?

2 个答案:

答案 0 :(得分:5)

您可以使用stream()创建帐户流,使用mapToInt将该流映射到每个帐户的金额,并使用IntStream.sum()对得到的Any.Type求和。< / p>

IntStream

此代码假定List<Account> accounts = new ArrayList<>(); int totalAmount = accounts.stream().mapToInt(Account::getAmount).sum(); 有一个getter getAmount

答案 1 :(得分:2)

如果您不介意使用第三方库,Eclipse Collections中可以使用sumOfInt。它返回long而不是int,因此出现溢出的可能性要小得多。

您可以在Iterate类上使用静态实用程序方法,该方法适用于任何java.lang.Iterable类型,如下所示:

List<Account> accounts = new ArrayList<>();
long sum = Iterate.sumOfInt(accounts, Account::getAmount);

或者,如果您的列表是MutableList,则可以使用列表中直接提供的方法。

MutableList<Account> accounts = Lists.mutable.empty();
long sum = accounts.sumOfInt(Account::getAmount);

注意:我是Eclipse Collections的提交者