Java中的比较器

Java中的比较器,java,Java,我正在努力解决我的家庭作业。这是我使用的代码。比较器,用于以两种方式对学生列表进行排序 public class Student { public static final Comparator<Student> BY_NAME = new ByName(); public static final Comparator<Student> BY_Gpa = new ByGpa(); private static class ByName impl

我正在努力解决我的家庭作业。这是我使用的代码。比较器,用于以两种方式对学生列表进行排序

public class Student {
    public static final Comparator<Student> BY_NAME = new ByName();
    public static final Comparator<Student> BY_Gpa = new ByGpa();

    private static class ByName implements Comparator<Student> {
        public int compare(Student v, Student w) {
            return v.getName().compareTo(w.getName());
        }
    }

    private static class ByGpa implements  Comparator<Student> {
        public int compare(Student v, Student w) {
            if (v.getGpa() == w.getGpa()) return 0;
            else if (v.getGpa() < w.getGpa()) return -1;
            else return 1;
        }
    }
}
公共班级学生{
公共静态最终比较器BY_NAME=new ByName();
公共静态最终比较器BY_Gpa=新ByGpa();
私有静态类ByName实现了Comparator{
公共整数比较(学生v,学生w){
返回v.getName().compareTo(w.getName());
}
}
私有静态类ByGpa实现了Comparator{
公共整数比较(学生v,学生w){
如果(v.getGpa()==w.getGpa())返回0;
else if(v.getGpa()

我不懂收集。排序。为什么要用这样复杂的形式呢?为什么不只是C++类中的一个静态函数来排序,而不是返回一个类,它实现了一个比较方法的比较器?它太复杂了。

Java 8对
Comparator
接口的增强使其更加优雅:

public static final Comparator<Student> BY_NAME = Comparator.comparing(Student::getName);
public static final Comparator<Student> BY_Gpa = Comparator.comparingInt(Student::getGpa);
publicstaticfinalcomparatorby_NAME=Comparator.comparating(Student::getName);
公共静态最终比较器,由_Gpa=Comparator.comparingit(Student::getGpa)生成;

在java8中,你可以做一些奇特的事情,比如:
比较器。比较(Student::getName)
。所以你可能想升级我在这里没有看到一个真正的问题,只是抱怨Java不像C++不清楚你在问什么,我看到的唯一真正的问题是问为什么Collections.sort很复杂。
ByGpa
在Java 8之前可以通过使用
return Double.compare(v.getGpa(),w.getGpa())
更简单,(或
getGpa
返回的任何基元类型)@ SokkyOne不确定为什么你认为它比C++复杂。Collections.sort是一个静态方法,它在一个类上进行排序,并且可以选择排序它的方法,就像STD::C++中的排序。如果C++中的Sunc不复杂,则需要指定开始和结束,而在java中,只需传递集合。