我想按出生年份的降序对数组进行排序。 我的数组有另外两个String类型的元素。 因此,作为一个例子,最早出生的人,例如1939年,将会出现在最高层,然后就是如此。
这是我的代码:
import java.util.*;
public class StudentInformationTest
{
public static void main (String [] args){
StudentInformation[] studentInfo = new StudentInformation[10];
studentInfo[0] = new StudentInformation("Student A",1971, "BSc FDIT");
studentInfo[1] = new StudentInformation("Student B",1964, "BSc FDIT");
studentInfo[2] = new StudentInformation("Student C",1996, "BSc FDIT");
studentInfo[3] = new StudentInformation("Student D",1939, "BSc FDIT");
studentInfo[4] = new StudentInformation("Student E",1945, "BSc FDIT");
studentInfo[5] = new StudentInformation("Student F",1991, "BSc FDIT");
studentInfo[6] = new StudentInformation("Student G",1987, "BSc FDIT");
studentInfo[7] = new StudentInformation("Student H",1968, "BSc FDIT");
studentInfo[8] = new StudentInformation("Student I",1968, "BSc FDIT");
studentInfo[9] = new StudentInformation("Student J",1973, "BSc FDIT");
printInfo(studentInfo);
printAge(studentInfo);
}
public static void printInfo(StudentInformation studentInfo[]){
for(int i = 0; i < studentInfo.length; i++){
System.out.println(studentInfo[i].getStudentName() + " " + studentInfo[i].getBirthDate() + " " + studentInfo[i].getProgrammeOfStudy());
}
System.out.println();
}
}
}
一旦我设法按降序打印出生年份,我还需要显示他们正在做的学生姓名和大学模块。 我知道其他问题已经被问到如何做到这一点,但我还没有看到一个与其他对象。 这是一个课堂会议,所以请原谅我的代码中的任何错误。
答案 0 :(得分:18)
使用Comparator
和ArrayList
。
在Comparator
使用新的默认和静态方法!
ArrayList<StudentInformation> infos = new ArrayList<StudentInformation>();
// fill array
Collections.sort(infos,
Comparator.comparingInt(StudentInformation::getBirthYear).reversed());
这是一个勇敢的新世界! :)
或者仍然比Java 7使用lambdas更好!
ArrayList<StudentInformation> infos = new ArrayList<StudentInformation>();
// fill array
Collections.sort(infos, (s1, s2) ->
Integer.compare(s2.getBirthYear(), s1.getBirthYear()));
使用匿名内部类。
class StudentDateComparator implements Comparator<StudentInformation> {
public int compare(StudentInformation s1, StudentInformation s2) {
return Integer.compare(s2.getBirthYear(), s1.getBirthYear());
}
}
ArrayList<StudentInformation> infos = new ArrayList<StudentInformation>();
// fill array
Collections.sort(infos, new StudentDateComparator());
Comparator
的作用是允许任何东西比较给定类型的两个对象(在本例中为StudentInformation
)。您也可以StudentInformation
实现Comparable<StudentInformation>
,但这种方式可能更好,因为有多种方法来比较学生的信息(按日期,在这里,但也可以通过名字,姓氏,数字注册的课程等。)。
通过在比较器中交换s1
和s2
的顺序,我们引发了逆序。另一种方法是按正常顺序否定compare
调用,或者使用普通比较器并将其包装在Collections.reverseOrder
中。
您也可以使用标准数组执行此操作。
StudentInformation[] infos = new StudentInformation[10];
// fill array
Arrays.sort(infos, new StudentDateComparator());
答案 1 :(得分:1)
在Java领域,有Comparable<E>
interface:
interface Comparable<E> {
public int compareTo(E other);
}
您应该制作StudentInfo
工具Comparable<StudentInfo>
,根据您的要求实施compareTo(StudentInfo other)
,并使用标准库中的方法(但这需要Comparator
代替)或适合您案例的一些排序算法。
答案 2 :(得分:1)
您可以制作StudentInformation
类工具Comparable
。然后,您必须实现方法compareTo
。此方法定义了如何以及何时将类的两个对象视为相等,更小或更大。
明确定义此属性后,您可以使用Collections.sort
实用程序对您的集合进行排序。