Java 8 Stream Filer на основе свойства объекта - PullRequest
2 голосов
/ 17 марта 2019

Я пытаюсь получить сумму всех значений из карты, используя потоки в Java 8. Ниже приведена коллекция, которую я имею:

Map<BigDecimal, List<Object>> map = ...... //some elements in this map

Допустим, объект имеет свойства ниже:

BigDecimal previousAmount;
int typeCode;

Я пытаюсь получить сумму всех предыдущих значений для каждого объекта в списке для всех ключей.Вот то, что я придумал:

BigDecimal previousAmt = map.values().stream().flatMap(List::stream)
            .map(Object::previousAmount).reduce(BigDecimal.ZERO, (a, b) -> a.add(b));

Это дает мне сумму всех элементов в списке и всех ключей правильно.Но я пытаюсь отфильтровать и получить сумму, только если typeCode больше 10.

Может ли кто-нибудь подсказать, как отфильтровать вышеуказанный поток с помощью typeCode?

1 Ответ

2 голосов
/ 17 марта 2019

Вы можете просто использовать метод Stream.filter () :

BigDecimal previousAmt = map.values().stream().flatMap(List::stream)
    .filter(i -> i.getTypeCode() > 10) // filters the stream
    .map(MyObject::getPreviousAmount)
    .reduce(BigDecimal.ZERO, BigDecimal::add);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...