В настоящее время я изучаю java.reduce()
, и недавно я кое-что обнаружил, читая некоторые материалы и просматривая видео. Я понимаю, что есть 3 способа использовать это, но у меня есть проблемы с получением 3 параметра для работы. Я надеялся, что кто-то сможет лучше объяснить, что с ним происходит, и почему я не получаю результаты, которые я исключил (среднее для набора объектов MagicNumber). Вот пример того, что у меня есть:
Объект, назовем его MagicNumber. java
public class MagicNumber{
Random randomValueGenerator = new Random();
int number;
public MagicNumber(){
this.number = randomValueGenerator.nextInt();
}
}
Случайный поток, содержащий маги c числа
public static Stream<MagicNumber> getNStream(){
List<MagicNumber> magic = new ArrayList<MagicNumber>();
for(int i = 0; i < 100; i++){
magic.add(new MagicNumber());
}
return magic.stream();
}
Функция для возврата среднего числа волхвов c число
// This only returns the sum of the magic numbers and not the average
public static double average(){
Stream<MagicNumbers> magicNumberStream = getNStream();
return magicNumberStream.reduce(
0.0, // initial value
(a,b) -> a + (double)b.number,
(a,b) -> (a + b)/100
)
}
Как следует из комментария, приведенное выше возвращает только сумму всех чисел волхвов c. Пока я чего-то ожидаю. Поэтому я не верю, что полностью понимаю назначение третьего параметра в функции reduce
. Кроме того, когда я пишу что-то вроде следующего, используя 2 параметра: Функция для возврата среднего волхва c число
// This throws an error due to the return type
public static double average(){
Stream<MagicNumbers> magicNumberStream = getNStream();
return magicNumberStream.reduce(
0.0, // initial value
(a,b) -> (double)(a.number + b.number)/100
)
}
я получаю ошибку Bad return type in lambda expression: double cannot be converted to MagicNumber
. Может ли кто-нибудь объяснить как (А), почему эти две average
функции не работают должным образом, и (Б), как изменить их, чтобы получить результат, который я ищу? Буду очень признателен за помощь!