2015-09-18 4 views
4

У меня есть класс, как следующийСуммы междунар из списка объекта

class Account{ 
    String Name; 
    int amount; 
} 

Если у меня есть список, как List<Account> то, как я могу получить общее количество из этого списка без использования какого-либо цикла вроде for или foreach?

ответ

4

Вы можете создать поток ваших учетных записей с помощью stream(), сопоставьте этот поток на сумму каждой учетной записи, используя mapToInt и суммировать получившийся IntStream используя IntStream.sum().

List<Account> accounts = new ArrayList<>(); 
int totalAmount = accounts.stream().mapToInt(Account::getAmount).sum(); 

Этот код предполагает, что существует геттер getAmount для amount.

+0

да его ИНТ я обновил мой вопрос – LynAs

1

Если вы не против использования сторонней библиотеки, то sumOfInt доступен в Eclipse Collections. Он возвращает 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, Коллекции

+0

если один заботится о переполнении, '.mapToLong (Account :: getAmount) .sum()' или '.collect (summingLong (Account :: getAmount))' будет работать так же хорошо. –

Смежные вопросы