Java Collections.sort()用于使用对象类中的方法引用的对象的ArrayList

Java Collections.sort()用于使用对象类中的方法引用的对象的ArrayList,java,object,collections,Java,Object,Collections,我想编写一个程序,以便: 1) 班级学生(姓名、id、批次) 2) 在该类中,编写一个int compareByBatch(Student s1,Student s2)方法 3) 使用collections.sort()比较对象 4) 使用compareByBatch方法作为sort方法的第二个参数 我能够按如下方式编写程序: Student.java类文件: public class Student { private String id; private String nam

我想编写一个程序,以便:

1) 班级学生(姓名、id、批次)

2) 在该类中,编写一个int compareByBatch(Student s1,Student s2)方法

3) 使用collections.sort()比较对象

4) 使用compareByBatch方法作为sort方法的第二个参数

我能够按如下方式编写程序:

Student.java类文件:

public class Student {
    private String id;
    private String name;
    private int Batch;

    //Added a class constructor getters and setters

     public static Comparator<Student> studBatch = new Comparator<Student>() {

            public int compare(Student s1, Employee s2) {

               int batch1 = s1.getBatch();
               int batch2 = s2.getBatch();

               //For ascending order
               return batch1-batch2;
           }};
}
公共班级学生{
私有字符串id;
私有字符串名称;
私有整数批;
//添加了类构造函数getter和setter
公共静态比较器studBatch=新比较器(){
公共整数比较(学生s1,员工s2){
int batch1=s1.getBatch();
int batch2=s2.getBatch();
//升序
返回批次1-批次2;
}};
}
然后,在主文件中添加以下内容:

创建ArrayList并在其中添加记录:

ArrayList<Student> stud = new ArrayList<>();

stud.add(new Student("A01", "John Doe", 101));

stud.add(new Student("A02", "Mike Gaman", 102));

Collections.sort(stud, stud.studBatch);
ArrayList螺柱=新的ArrayList();
增加(新学生(“A01”,“约翰·多伊”,101));
增加(新学生(“A02”,“迈克·加曼”,102));
集合。排序(螺柱、螺柱、螺柱批次);
上面的代码运行良好,我按批获得已排序的记录


但是,我的问题是,如何根据我在开始时提到的编码要求编写代码,即在学生类中使用compareByBatch()方法,在集合中使用in.sort()?我需要从对象类传递一个方法引用,作为Collections.sort()的第二个参数。

我想本练习的目的是让您学习使用方法引用语法

如果查看
Collections.sort
,它需要一个
比较器作为第二个参数。这个
比较器
实际上可以用签名
int compare(T obj1,T obj2)
的方法来表示。这是其中一个功能接口

因此,您不需要将
Comparator
的实现作为对象传递给它,而只需将方法引用传递给它即可

Collections.sort(stud, Student::compareByBatch);
注意我如何使用
。这就是您需要用来表示方法引用的语法

Collections.sort(stud, Student::compareByBatch);
您的
compareByBatch
方法可以如下所示:

public static int compareByBatch(Student s1, Student s2) {
    int batch1 = s1.batch;
    int batch2 = s2.batch;
    return batch1-batch2;
}

顺便说一下,您的
compareByBatch
不是一个很好的实现。您可能应该首先检查
null
s,然后使用
Integer.compare(batch1,batch2)
,而不是仅仅减去它们。请参阅以了解原因。

集合.排序(stud,Student::compareByBatch)
?事实上,你应该向提供要求的人询问更多信息。我们只能猜测。投票结束,因为不清楚。这是一个有效的方案,请检查下一篇文章中给出的解决方案,这对我很有效!一个“答案”是否对你有帮助与这个“问题”是否适合你的决定无关!它起作用了!!谢谢你的帮助!!:)