【问题标题】:java collection sort on the bases of another collection基于另一个集合的java集合排序
【发布时间】:2015-07-21 22:09:12
【问题描述】:

我在一次采访中被问到这个问题:

Class Student{
  int rollno;
  String name;
  List<Mark> marks;
}

Class Mark{
  String subject;
  int mark;
}

如何从收集学生中获得获得第三高分的学生?

【问题讨论】:

  • 你如何定义“第三高分”?
  • 那么你可以实现一个循环系统和一个计数器来计算学生的数量,然后你需要按降序对它们进行排序,以使它们按正确的顺序排列,然后选择第三高的跨度>
  • 假设我们正在计算分数列表中的百分比/平均分数......但在这种情况下,我们将假设四个学生的百分比为 80%,五个学生的百分比为 70%,三个学生的百分比为 60 %,两个学生占 50%。现在我们需要所有百分比第三高的学生,找出这一点的最佳方法是什么?

标签: java collections


【解决方案1】:

由于它们在集合中,您还可以使用自定义比较器调用 Collections.sort,如下所示:

   Collections.sort(studentList, new Comparator<Student>() {
       @Override
       public int compare(Student a, Student b) {
           double mark_a = Collections.max(a.marks);
           double mark_b = Collections.max(b.marks);
           return Double.compare(mark_a, mark_b);
       }
   });

然后您可以简单地返回第三个学生。 (您可能需要更改 mark_a 和 mark_b 的计算方法,具体取决于“最高分”的含义......他们可能想要一个平均值)

【讨论】:

  • 假设我们正在计算分数列表中的百分比/平均分数......但在这种情况下,我们将假设四个学生的百分比为 80%,五个学生的百分比为 70%,三个学生的百分比为 60 %,两个学生占 50%。现在我们需要所有百分比第三高的学生,找出这一点的最佳方法是什么?
  • 创建一个类似于public double average(List&lt;Marks&gt; list){ double avg = 0; for(Mark m: list){ avg += m.mark;} return (avg / list.size()); } 的方法,然后将double mark_a = Collections.max(a.marks); and double mark_b = Collections.max(b.marks); 行替换为double mark_a = average(a.marks); and double mark_b = average(b.marks);
猜你喜欢
  • 2019-06-12
  • 2022-01-19
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 2018-01-02
相关资源
最近更新 更多