英文:
search for the average via streamapi
问题
如何使用API流来找到给定科目的所有学生的平均成绩?允许在Hashmap<String, String>映射中。
举例:键:“Ann”,值:“物理3.5 数学4.0 历史2.5”
类 学生 {
私有 字符串 名称;
私有 Map<String, List<Integer>> 分数;
公共 学生(String 名称, Map<String, List<Integer>> 分数) {
此.名称 = 名称;
此.分数 = 分数;
}
公共 字符串 获取名称() {
返回 名称;
}
公共 Map<String, List<Integer>> 获取分数() {
返回 分数;
}
公共 静态 空 主方法(String[] 参数) {
Map<String, List<Integer>> 分数Ann = 新 HashMap<>();
分数Ann.put("物理", List.of(4, 4, 5));
分数Ann.put("数学", List.of(2, 3, 4));
分数Ann.put("历史", List.of(3, 3, 3));
Map<String, List<Integer>> 分数Kate = 新 HashMap<>();
分数Kate.put("物理", List.of(1, 2, 3));
分数Kate.put("数学", List.of(5, 5, 3));
分数Kate.put("历史", List.of(4, 2, 5));
学生[] 学生们 = {新 学生("Ann", 分数Ann),
新 学生("Kate", 分数Kate)
};
}
}
英文:
how to use the api stream to find the average grade in a given subject for all students?
Allow in Hashmap<String, String > map
For example: key: "Ann", value: "Physics 3.5 Math 4.0 History 2.5"
class Student {
private String name;
private Map<String, List<Integer>> marks;
public Student(String name, Map<String, List<Integer>> marks) {
this.name = name;
this.marks = marks;
}
public String getName() {
return name;
}
public Map<String, List<Integer>> getMarks() {
return marks;
}
public static void main(String[] args) {
Map<String, List<Integer>> markAnn = new HashMap<>();
markAnn.put("Physics", List.of(4, 4, 5));
markAnn.put("Mathematics", List.of(2, 3, 4));
markAnn.put("History", List.of(3, 3, 3));
Map<String, List<Integer>> markKate = new HashMap<>();
markKate.put("Physics", List.of(1, 2, 3));
markKate.put("Mathematics", List.of(5, 5, 3));
markKate.put("History", List.of(4, 2, 5));
Student[] students = {new Student("Ann", markAnn),
new Student("Kate", markKate)
};
}
}
答案1
得分: 3
根据我理解,您需要一个能找出学科平均分的方法。因此,您可以创建一个名为 findAverage 的方法:
public static Map<String, List<Integer>> findAverage(Map<String, List<Integer>> students){
return students.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> Collections.singletonList(
(int) entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0)
)
));
}
该方法返回带有以下值的 Map<String, List
{Mathematics=[4], History=[3], Physics=[2]}
然后您可以将其添加到您的集合中。
Student[] students = {new Student("Ann", findAverage(markAnn)),
new Student("Kate", findAverage(markKate))
};
请注意,可能会有一些情况下平均分可能是 4.3 或 3.5。所以如果您需要,您可以通过使用 mapToDouble()
而不是 mapToInt()
来随时将类型更改为 double。
英文:
As I understood you need a method that`s finds all averages in subjects for student. So you can create method like findAverage:
public static Map<String, List<Integer>> findAverage(Map<String, List<Integer>> students){
return students.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> Collections.singletonList(
(int) entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0)
)
));
}
The method returns Map<String, List<Integer>> with value like:
{Mathematics=[4], History=[3], Physics=[2]}
than you can add it to your collection.
Student[] students = {new Student("Ann", findAverage(markAnn)),
new Student("Kate", findAverage(markKate))
};
Note that could be some situations when the average could be 4.3 or 3.5. So if you need it. You can change types to double whenever you want by using mapToDouble()
instead mapToInt()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论