Вопрос по изменению данных в Stream API
Имеем на выходе из потока Map [Имя студента, средняя оценка] можно ли как то в потоке изменить все значения в зависимости от среднего балла студента, например если > 4.5 то меняем на "Good" если > 4 && < 4.5 на "Normal" и тд, ну и на выходе получить соответственно уже Map [String, String]
Ответы (2 шт):
Автор решения: Alex Krass
→ Ссылка
Да, вы можете сделать это прямо в лямбда функции, просто добавив нужные условия после получения средней оценки.
student -> {
double average = student.getMarks(). ... .orElse(0.0);
if (average < 2) return "Bad";
else if (average >= 2 && average < 4) return "Normal";
else return "Good";
}
Или лучше оформить это функцией, к примеру private String getStringMark(double mark) { ... } и передавать ей значения.
student -> getStringMark(student.getMarks(). ... .orElse(0.0))
Автор решения: Andrei SuperJuice
→ Ссылка
Map<String,List<St>> map = list.stream().collect(Collectors.groupingBy(el ->{
if(el.grades.stream().mapToInt(q->q).average().getAsDouble() > 5){
return "Good";
}
if(el.grades.stream().mapToInt(q->q).average().getAsDouble() < 5){
return "Bad";
}
else {
return "Middle";
}
}));