创建父类与子类,staff为父类,测试类添加职员,TEACHER,校长,保安多个实例,编写以下这几个方法private static void printName(Staff[] staffs)打印出每个人的名字private static void printSalary(Staff[] staffs)打印出Staff类或者其子类对象的薪水,支持对Staff类及其子类按照各自的薪水降序排序;private static void sortByAge(Staff[] staffs),对Staff对象按照年龄升序排序,再编写一个方法按name升序进行排序;sortByDateHired,支持对Staff类及其子类按照各自的dateHired升序排序,可以使用java.util.Date类的getTime方法。编写NameComparator,AgeComparator和ComplexComparator比较器。其中ComplexComparator为复合比较器,至少选用两个关键字来排序。
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
class Staff {
protected String name;
protected int age;
protected double salary;
protected Date dateHired;
public Staff(String name, int age, double salary, Date dateHired) {
this.name = name;
this.age = age;
this.salary = salary;
this.dateHired = dateHired;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
public Date getDateHired() {
return dateHired;
}
}
class Teacher extends Staff {
public Teacher(String name, int age, double salary, Date dateHired) {
super(name, age, salary, dateHired);
}
}
class Principal extends Staff {
public Principal(String name, int age, double salary, Date dateHired) {
super(name, age, salary, dateHired);
}
}
class Security extends Staff {
public Security(String name, int age, double salary, Date dateHired) {
super(name, age, salary, dateHired);
}
}
class StaffUtils {
public static void printName(Staff[] staffs) {
for (Staff staff : staffs) {
System.out.println(staff.getName());
}
}
public static void printSalary(Staff[] staffs) {
for (Staff staff : staffs) {
System.out.println(staff.getSalary());
}
}
public static void sortByAge(Staff[] staffs) {
Arrays.sort(staffs, new AgeComparator());
}
public static void sortByName(Staff[] staffs) {
Arrays.sort(staffs, new NameComparator());
}
public static void sortByDateHired(Staff[] staffs) {
Arrays.sort(staffs, Comparator.comparing(Staff::getDateHired));
}
}
class NameComparator implements Comparator<Staff> {
@Override
public int compare(Staff o1, Staff o2) {
return o1.getName().compareTo(o2.getName());
}
}
class AgeComparator implements Comparator<Staff> {
@Override
public int compare(Staff o1, Staff o2) {
return Integer.compare(o1.getAge(), o2.getAge());
}
}
class ComplexComparator implements Comparator<Staff> {
private final Comparator<Staff> firstComparator;
private final Comparator<Staff> secondComparator;
public ComplexComparator(Comparator<Staff> firstComparator, Comparator<Staff> secondComparator) {
this.firstComparator = firstComparator;
this.secondComparator = secondComparator;
}
@Override
public int compare(Staff o1, Staff o2) {
int result = firstComparator.compare(o1, o2);
if (result == 0) {
result = secondComparator.compare(o1, o2);
}
return result;
}
}