Подсчет элементов и проверка на выполнение условия 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);
}