import java.util.*;
import java.util.stream.Collectors;
class Student {
private String name;
private int age;
private List<Integer> scores;
public Student(String name, int age, List<Integer> scores) {
this.name = name;
this.age = age;
this.scores = scores;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<Integer> getScores() {
return scores;
}
public double getAverageScore() {
return scores.stream()
.mapToInt(Integer::intValue)
.average()
.orElse(0.0);
}
}
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Alice", 20, Arrays.asList(85, 90, 78)),
new Student("Bob", 17, Arrays.asList(70, 80, 75)),
new Student("Charlie", 19, Arrays.asList(88, 92, 85)),
new Student("David", 22, Arrays.asList(75, 80, 78))
);
List<String> result = students.stream()
.filter(student -> student.getAge() > 18 && student.getAverageScore() > 80)
.sorted(Comparator.comparingDouble(Student::getAverageScore).reversed())
.map(Student::getName)
.collect(Collectors.toList());
System.out.println(result);
}
}