Java Collections.sort()用于使用对象类中的方法引用的对象的ArrayList
我想编写一个程序,以便: 1) 班级学生(姓名、id、批次) 2) 在该类中,编写一个int compareByBatch(Student s1,Student s2)方法 3) 使用collections.sort()比较对象 4) 使用compareByBatch方法作为sort方法的第二个参数 我能够按如下方式编写程序: Student.java类文件: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
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)
?事实上,你应该向提供要求的人询问更多信息。我们只能猜测。投票结束,因为不清楚。这是一个有效的方案,请检查下一篇文章中给出的解决方案,这对我很有效!一个“答案”是否对你有帮助与这个“问题”是否适合你的决定无关!它起作用了!!谢谢你的帮助!!:)