У меня есть следующие методы:
static IntStream streamedDivisors(final int n) {
return IntStream.range(2, n).parallel().filter(input -> n % input == 0);
}
static int streamedPhi(final int n) {
return streamedDivisors(n).reduce(0, x -> x * x);
}
и я получаю ошибку компиляции в streamedPhi, указывающую, что у меня есть несовместимые типы параметров в моем выражении лямбда. Может ли кто-нибудь помочь мне понять это? Я по существу стараюсь взять делители заданного числа n и агрегировать число по некоторой определенной мне функции (в этом случае, возведя квадрат числа).
Ваша проблема компиляции связана с тем, что IntBinaryOperator#applyAsInt(int, int)
принимает два аргумента. Вы только объявляли/предоставляли его.
Как указано в комментариях и после просмотра javadoc IntStream#reduce(int, IntBinaryOperator)
, вы фактически не применяете действительное сокращение. Мне не сразу понятно, что вы имеете в виду и суммируете число по определенной функции, которую я определил, но у Брайана есть некоторые предложения.