Подсчет элементов и проверка на выполнение условия Stream api

Имеется Stream, содержащий несколько ArrayList. Необходимо подсчитать сумму значений определенного int параметра объекта SomeObject, среди всех этих объектов в списке. После чего проверить, превышает ли сумма определенное значение. Если сумма больше, то выполнить определенное действие. При любом исходе нужно переключиться на следующий массив.


Ответы (1 шт):

Автор решения: Олексій Моренець
public void doActionOnSomeObjectsWithSumGreaterThan(int number, Consumer<? super Map.Entry<List<SomeObject>, Integer>> action) {
    listStream.collect(groupingBy(Function.identity(), summingInt(someObjects -> someObjects.stream()
            .mapToInt(SomeObject::getSomeInt).sum())))
            .entrySet().stream().filter(entry -> entry.getValue() > number)
            .forEach(action);
}

public static void main(String[] args) {
    int number = 8;
    Consumer<? super Map.Entry<List<SomeObject>, Integer>> action = entry -> System.out.println(entry.getKey() + ": " + entry.getValue());
    new StreamListSum().doActionOnSomeObjectsWithSumGreaterThan(number, action);
}
→ Ссылка