Вопрос по изменению данных в 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";
            }

        }));
→ Ссылка