创建父类与子类, 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 为复合比较器,至少选用两个关键字来排序。使用Lambda表达式NameComparator,AgeComparator和ComplexComparator比较器。
看起来是个作业,用copilot-x chat来写了下,现在的AI是真的牛哇。下边是它的回答。我瞄了两眼,可能在printName 和 printSalary 里的Comparator没有复用NameComparator他们,是个缺陷,刚好你你自己看一看改一改,熟悉下,也不枉费作业的意义了。
以下是您所描述的类和方法的Java代码实现。请注意,由于缺少Staff类的定义,我只能使用一个简单的Staff类作为示例。您需要根据您的实际需求修改代码。
import java.util.*;
class Staff {
private String name;
private int age;
private double salary;
private 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 SecurityGuard extends Staff {
public SecurityGuard(String name, int age, double salary, Date dateHired) {
super(name, age, salary, dateHired);
}
}
public class Test {
public static void main(String[] args) {
Staff[] staffs = {
new Teacher("John", 35, 5000, new Date(2020, 1, 1)),
new Principal("Mary", 45, 8000, new Date(2018, 1, 1)),
new SecurityGuard("Tom", 25, 3000, new Date(2021, 1, 1))
};
printName(staffs);
System.out.println();
printSalary(staffs);
System.out.println();
sortByAge(staffs);
printName(staffs);
System.out.println();
sortByDateHired(staffs);
printName(staffs);
System.out.println();
ComplexComparator complexComparator = new ComplexComparator(new NameComparator(), new AgeComparator());
Arrays.sort(staffs, complexComparator);
printName(staffs);
}
private static void printName(Staff[] staffs) {
for (Staff staff : staffs) {
System.out.println(staff.getName());
}
}
private static void printSalary(Staff[] staffs) {
Arrays.sort(staffs, Comparator.comparingDouble(Staff::getSalary).reversed());
for (Staff staff : staffs) {
System.out.println(staff.getName() + ": " + staff.getSalary());
}
}
private static void sortByAge(Staff[] staffs) {
Arrays.sort(staffs, Comparator.comparingInt(Staff::getAge));
}
private static void sortByDateHired(Staff[] staffs) {
Arrays.sort(staffs, Comparator.comparing(Staff::getDateHired));
}
static class NameComparator implements Comparator<Staff> {
public int compare(Staff s1, Staff s2) {
return s1.getName().compareTo(s2.getName());
}
}
static class AgeComparator implements Comparator<Staff> {
public int compare(Staff s1, Staff s2) {
return Integer.compare(s1.getAge(), s2.getAge());
}
}
static class ComplexComparator implements Comparator<Staff> {
private final Comparator<Staff> cmp1;
private final Comparator<Staff> cmp2;
public ComplexComparator(Comparator<Staff> cmp1, Comparator<Staff> cmp2) {
this.cmp1 = cmp1;
this.cmp2 = cmp2;
}
public int compare(Staff s1, Staff s2) {
int res = cmp1.compare(s1, s2);
if (res != 0) {
return res;
}
return cmp2.compare(s1, s2);
}
}
}