Ошибка компилятора, которую я получаю, отличается от того, что вызов метода collect
не применим для аргументов.
Ваш тип возврата Map<Long, Double>
правильный, но что не так, это ваш ToIntFunction<? super T>
. Когда вы делаете этот метод универсальным, вы говорите, что вызывающая сторона контролирует T
; вызывающая сторона может предоставить аргумент типа, например:
yourInstance.<FooBar>findAverageInEpochGroupOrig(answers, Answer::getAnswer_count);
Однако этот метод не должен быть универсальным. Просто возьмите ToIntFunction<? super Answer>
для работы с Answer
для значений карты. Это компилирует:
public static Map<Long, Double> findAverageInEpochGroup(List<Answer> values, ToIntFunction<? super Answer> fn) {
return values.stream()
.collect(Collectors.groupingBy(Answer::getCreation_date, Collectors.averagingInt(fn)));
}
Кроме того, обычные соглашения об именах Java указывают, что вы будете называть свою переменную в случае верблюда, например, "viewCount" вместо "view_count". Это также повлияет на любые методы получения и установки.