我有一个课程如下
class Account{
String Name;
int amount;
}
如果我的列表为List<Account>
,那么如何在不使用for
或foreach
等任何循环的情况下从此列表中获取总金额?
答案 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的提交者