当前位置: 首页 > 知识库问答 >
问题:

使用Java8流获取最大平均科目成绩

施利
2023-03-14
 class Student{
        Map<String,Integer> subjectMarks;
        String name;
        
        
        public Student(Map<String,Integer> subject, String name) {
            super();
            this.subjectMarks = subject;
            this.name = name;
        }
        public Map<String,Integer> getSubjectMarks() {
            return subjectMarks;
        }
        public void setSubjectMarks(Map<String,Integer> subject) {
            this.subjectMarks = subject;
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
     }
        ArrayList<Student> arr = new ArrayList<Student>();
        Map m1 = new HashedMap();
        m1.put("Maths",40);
        m1.put("Science",50);
        Map m2 = new HashedMap();
        m2.put("Maths",60);
        m2.put("Science",20);
        arr.add(new Student(m1, "RAJ"));
        arr.add(new Student(m2, "AMIT"));

共有1个答案

史劲
2023-03-14

不要将自己局限于Java8中的流的概念,在那里您必须将流的结果直接处理到下一个流中,诸如此类...效率可能不是最好的,但考虑嵌套循环。

开始思考你有什么:每个学生都有几个分数。您希望找到每个学生的这些分数的平均值。您可以将问题简化为首先考虑如何获得学生的平均值。

double average = student.getSubjectMarks().values().stream()
        .mapToInt(Integer::valueOf).average().orElse(0.0);

即使您的示例只显示整数,平均值也可以是浮点数。

Map<String, Double> studentAverages = new HashMap<>();

arr.forEach(student -> {
    double average = student.getSubjectMarks().values().stream()
            .mapToInt(Integer::valueOf).average().orElse(0.0);
    studentAverages.put(student.getName(), average);
});
studentAverages.values().stream().mapToDouble(Double::doubleValue).max();
 类似资料:
  • 我想用Java8lambda表达式在java列表中找到max值,所以,我有一个类叫TicketMaster,项表是TicketMasterLog,在TicketMasterLog类中我有StatusMaster类的statusId引用列,所以这里我想在TicketMasterLog列表中找到max statusId,下面我给出我的代码请参考 而TicketMasterItem表是 因此,在列表中,

  • 我想采取以下方法: 并使用Streams api更新它。这是我到目前为止得到的: 有没有办法在不流式传输两次(第二次获得计数)的情况下做到这一点?

  • 问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:

  • 问题内容: 我想使用java 8流方法从列表中获取最大值。 结构如下: 我读取了一个csv文件,并将每一行的数据存储在一个单独的type对象中。 所有这些对象都存储在一个名为 所有对象都有一个字段: a 包含2个字段:和 public class Round{ private List hits; } public class Hits{ private int numberOfGames; pr

  • 问题内容: 我试图显示最高平均工资;但是,我似乎无法使其正常工作。 我可以得到要显示的平均薪水清单: 但是,当我尝试显示具有以下项的最大平均薪水列表时: 它没有运行。我收到“无效标识符”错误。如何使用每个工人的平均工资来找到每个工人的最高平均工资? 谢谢。 问题答案: 由聚合函数(例如avg)产生的列通常获得任意名称。只需为其使用别名,然后在其上进行选择:

  • 我正在学习java Stream,并且很难解决下面的问题。我卡住的原因是因为我对处理没有任何想法。 通过执行,我偶然发现了一个“count”的解决方案,但除此之外,我无法继续下去。请帮助我如何处理这些问题,并告诉我在这种情况下工作的原因。到目前为止,我已经尝试了我所学到的一切。