1 Имеется список студентов. Каждый студент имеет имя, список оценок и специальность.
Найдите первых 5 студентов специальности “Информатика” с средним баллом выше 4.5, отсортированных по убыванию среднего балла.
В решении не использовать циклы! Только StreamAPI
class Student {
private String name;
private List grades;
private String specialty;
public double getAverageGrade() {…}
}
java
java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
class Student {
private String name;
private List<Double> grades;
private String specialty;
public Student(String name, List<Double> grades, String specialty) {
this.name = name;
this.grades = grades;
this.specialty = specialty;
}
public double getAverageGrade() {
return grades.stream()
.mapToDouble(Double::doubleValue)
.average()
.orElse(0);
}
public String getName() {
return name;
}
public String getSpecialty() {
return specialty;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + ''' +
", grades=" + grades +
", specialty='" + specialty + ''' +
'}';
}
}
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("John", Arrays.asList(4.0, 4.5, 5.0), "Информатика"));
students.add(new Student("Alice", Arrays.asList(5.0, 5.0, 5.0), "Информатика"));
students.add(new Student("Bob", Arrays.asList(3.5, 4.0, 3.0), "Физика"));
students.add(new Student("Mike", Arrays.asList(4.5, 4.5, 4.5), "Информатика"));
students.add(new Student("Kate", Arrays.asList(3.0, 3.5, 3.0), "Информатика"));
List<Student> filteredStudents = students.stream()
.filter(student -> student.getSpecialty().equals("Информатика"))
.filter(student -> student.getAverageGrade() > 4.5)
.sorted(Comparator.comparingDouble(Student::getAverageGrade).reversed())
.limit(5)
.collect(Collectors.toList());
filteredStudents.forEach(System.out::println);
}
}
В данном коде создается класс Student с полями name, grades и specialty. В этом классе также присутствует метод getAverageGrade(), который использует Stream API для вычисления среднего бала студента. Затем создается список студентов и заполняется данными.
С использованием Stream API выполняется фильтрация и сортировка студентов. Сначала фильтруются только те студенты, у которых специальность равна "Информатика" и средний балл выше 4.5. Затем происходит сортировка по убыванию среднего балла и ограничение до первых 5 студентов.
Наконец, отфильтрованные и отсортированные студенты выводятся на экран с помощью метода forEach(System.out::println).
Таким образом, код решает задачу, находит первых 5 студентов специальности "Информатика" с средним баллом выше 4.5, отсортированных по убыванию среднего балла.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет