Предыстория. Предположим, я заполнил массив сам с помощью нехитрого цикла, в результате получилось
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150]
, в итоге четных должно быть 640, нечетных 560
Стандартное решение с циклами вполне успешно проходит проверку, но я хотел сделать с помощью стримов. И вот незадача. По моей логике при фильтре на индекс должны получаться те же 640 и 560, а выходит... 1200 и 0. 1200 - как раз сумма, т.е. фильтр работает у меня не так как нужно.
Гуглил, нашел примерно такую же штуку. 2 варианта: (такой не работает совсем - получается 1200 и 0)
long numberOfPeopleInEvenHouses = 0;
long numberOfPeopleInOddHouses = 0;
System.out.println("Arrays.toString(houses) BEFORE FILTER " + Arrays.toString(houses));
numberOfPeopleInEvenHouses = Arrays.stream(houses).filter(i -> i % 2 == 0).sum();
System.out.println(numberOfPeopleInEvenHouses);
numberOfPeopleInOddHouses = Arrays.stream(houses).filter(i -> i % 2 != 0).sum();
System.out.println(numberOfPeopleInOddHouses);
И такой:
IntStream.range(0, houses.length).filter(i -> i % 2 == 0).forEach(System.out::println);
как результат выводит индексы 0, 2, 4... 14
а если добавить .sum() вместо вывода на экран, то 56. Сумму индексов. А нужно сумму значений элементов по этим индексам. Тоже не совсем, что хочется.
Чувствую, что близко... но не могу добить.
Прошу помочь, кто "шарит" в стримах или пытался решить задачу таким образом. Спасибо
массивстрим (см. ниже), но уже... значений (или как-то так), который и суммируем. Дальше тяжело. Хотя да, я тоже пораскладывал и почитал документацию. В целом понятно, но еще не до конца, прямо говоря. Осталось еще раз повторить (особенно) лямбды и стримы, потом вернуться и добить сабж. Топик не закрываю пока что.