首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对象数组查找前10名学生分数

使用对象数组查找前10名学生分数
EN

Stack Overflow用户
提问于 2017-06-08 19:37:33
回答 2查看 322关注 0票数 0

我最近参加了一次面试,他们问了我一个小问题,问题如下

有学生名单

代码语言:javascript
复制
    List<Student> students;

    Class Student{
     String rollNo;
     Map<String, Integer> marks ;
}

Stdunt.marks实际上是主语和标记的组合

应该写一个方法,它应该根据主题返回前10名学生数组。

代码语言:javascript
复制
List<Student> getTop10(String subjectName){
}
EN

回答 2

Stack Overflow用户

发布于 2017-06-08 19:37:33

我给出的答案是:

代码语言:javascript
复制
private static void PrintTop5(ArrayList<Student> list,String subject){
    Collections.sort(list, new Comparator<Student>() {

        @Override
        public int compare(Student st1, Student st2) {
            // TODO Auto-generated method stub
            return  st2.getSubjectMark(subject) - st1.getSubjectMark(subject);
        }
    });

    ArrayList<Student> studentList = new ArrayList<Student>(list.subList(0,5));
    for(Student student : studentList){
        System.out.println(student.getRollNum() + " MARK : "+student.getSubjectMark(subject));
    }
}

学生类如下所示

代码语言:javascript
复制
package com.main;

import java.util.HashMap;

public class Student {

    private String rollNo;
    private HashMap<String, Integer> marks ;

    public Student(){
        marks = new HashMap<>();
    }

    public void setRollNumber(String number){
        this.rollNo = number;
    }

    public void setSubjectAndMark(String subName,int mark){
        this.marks.put(subName, mark);
    }

    public HashMap<String, Integer> getAllMarks(){
        return marks;
    }

    public int getSubjectMark(String subject){
        return marks.get(subject);
    }

    public String getRollNum(){
        return rollNo;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-06-08 20:08:57

总的来说,你的想法是正确的,对整个列表进行排序,并选择前N名的学生,实际上用java 8看起来会更干净。

代码语言:javascript
复制
private static void PrintTop5(ArrayList<Student> list,String subject){
    list.sort(Comparator
                    .comparing((Student student) -> student.getSubjectMark(subject))
                    .reversed());

    List<Student> studentList = list.stream().limit(5).collect(Collectors.toList());
    for(Student student : studentList){
        System.out.println(student.getRollNum() + " MARK : "+student.getSubjectMark(subject));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44434665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档