面试题答案
一键面试import java.util.*;
import java.util.stream.Collectors;
class Student {
private String name;
private List<Integer> scores;
public Student(String name, List<Integer> scores) {
this.name = name;
this.scores = scores;
}
public String getName() {
return name;
}
public List<Integer> getScores() {
return scores;
}
}
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Alice", Arrays.asList(85, 90, 95)),
new Student("Bob", Arrays.asList(78, 88, 92))
);
Map<String, Double> averageScores = students.stream()
.collect(Collectors.toMap(
Student::getName,
student -> student.getScores().stream()
.mapToInt(Integer::intValue)
.average()
.orElse(0.0)
));
System.out.println(averageScores);
}
}
上述代码首先定义了Student
类,包含name
和scores
属性。然后在main
方法中创建了一个students
列表。接着使用Java Stream
的collect
方法,将学生的名字作为键,平均成绩作为值,收集到一个Map<String, Double>
中。Collectors.toMap
方法接受两个参数,第一个参数用于提取键,第二个参数用于计算值。在计算值时,通过average
方法获取平均成绩,如果没有成绩则返回0.0。