【发布时间】:2016-05-26 06:53:33
【问题描述】:
我有一份学生名单,上面有他们联系的老师 ID。下面是学生豆。
public class Student {
private Integer Id;
private String Name;
private Integer teacherId;
public Student(Integer empId, String empName, Integer teacherId) {
super();
this.empId = empId;
this.empName = empName;
this.teacherId = teacherId;
}
// setters getters
}
现在在我的主要课程中,我有学生列表,其数据如下。
public static void main(String[] args) {
int teacherId = 6;
List<Student> list = new ArrayList<Student>();
list.add(new Student(1002, "Kausik",4));
list.add(new Student(1004, "Tridibendu",6));
list.add(new Student(1007, "Ram",8));
list.add(new Student(1003, "Neeraj",6));
list.add(new Student(1009, "Manish",8));
list.add(new Student(1001, "Shyam",1));
// Sorting collection in ascending order based on teacher id
Collections.sort(list, new StudentComparator());
}
下面是我的学生比较类。谁能帮我在比较方法中写什么,以便如果我将 2 作为教师 id 传递,列表应该按这样一种方式排序,即所有与教师 id 2 联系的学生都应该在顶部,其余的必须在底部.
或者有没有其他方法可以在java中做到这一点?
public class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.getTeacherId().compareTo(o2.getTeacherId());
}
}
下面是我得到的输出。
Id: 1001, Name: Shyam, TeacherId: 1
Id: 1002, Name: Kausik, TeacherId: 4
Id: 1004, Name: Tridibendu, TeacherId: 6
Id: 1003, Name: Neeraj, TeacherId: 6
Id: 1007, Name: Ram, TeacherId: 8
Id: 1009, Name: Manish, TeacherId: 8
但我希望输出基于传递的教师 ID 作为参数。如果我将 6 作为教师 ID 传递,那么我的输出应该如下:
Id: 1004, Name: Tridibendu, TeacherId: 6
Id: 1003, Name: Neeraj, TeacherId: 6
Id: 1001, Name: Shyam, TeacherId: 1
Id: 1002, Name: Kausik, TeacherId: 4
Id: 1007, Name: Ram, TeacherId: 8
Id: 1009, Name: Manish, TeacherId: 8
所以老师的 id 因为 6 应该在列表的顶部。
【问题讨论】:
-
有什么问题..代码看起来不错!
what do i write in my compare method是什么意思?您是否尝试在列表中打印Student object?使用以下代码后,应根据teacherId对它们进行排序:Collections.sort(list, new StudentComparator()); -
我的意思是根据作为参数传递的教师 ID 进行排序。如果我说按教师 ID 6 排序,则应输出以下内容。联系教学 6 的学生应在顶部 ID:1001,姓名:Shyam,TeacherId:6 Id:1002,姓名:Kausik,TeacherId:6 Id:1004,姓名:Tridibendu,TeacherId:5 Id:1003,姓名:Neeraj, TeacherId:7 Id:1007,姓名:Ram,TeacherId:8 Id:1009,姓名:Manish,TeacherId:8
-
你会如何对其余的学生进行排序?或者它们应该是随机的。所以你有学生连接到顶部 6 的 TeacherID,其余的从哪里来?接下来应该是 5 还是 7,我们应该降序,还是无关紧要?需要更具体一点。另外,到目前为止,您尝试过什么?
-
另外,您不会在添加新参数 TeacherID 时覆盖
compare方法。如果您假设比较将在其他通用函数中使用,这可能会导致问题。如果你手动调用它,它会起作用,但只能以这种方式 -
@Draken 是的,如果我将 6 作为参数传递给排序,那么教师 id 6 应该排在最前面,其余的按任何顺序排列。是的,接下来是 5 或 7。
标签: java sorting collections comparator