У меня ниже задачи. Я встал на проблему а). Создавайте классы, которые описывают сотрудников с почасовой оплатой и фиксированной оплатой. Дайте свои предложения относительно отношений между классами. Внедрить метод расчета среднемесячной заработной платы. Для сотрудников с почасовой оплатой используйте следующую формулу: "среднемесячная зарплата = 20,8 * 8 * почасовая ставка", для сотрудников с фиксированной оплатой - "среднемесячная зарплата = фиксированный ежемесячный платеж". Напишите хорошо прокомментированный код для решения следующих задач. A) Сортируйте коллекцию сотрудников в порядке убывания средней заработной платы. В случае равной зарплаты - по названию. Напишите идентификатор, имя и месячную зарплату для всех сотрудников из коллекции. б) Напишите информацию о первых пяти сотрудниках из коллекции (проблема а). c) Напишите идентификатор трех последних сотрудников из коллекции (проблема b). d) Напишите код для чтения и записи коллекции этих объектов из (в) файла. e) Напишите код для обработки неправильного формата входящего файла.
Я создал ниже классов, но я понятия не имею, как сортировать разные объекты из разных классов. Пожалуйста, помогите мне!!!!
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<EmployeeFixedPayment> coll = new ArrayList<Employee>();
EmployeeHourlyWage a = new EmployeeHourlyWage("Edd", "Goo", 23, 4);
EmployeeHourlyWage b = new EmployeeHourlyWage("Tedd", "Foo", 2, 5);
EmployeeHourlyWage c = new EmployeeHourlyWage("Bob", "Bee", 4, 2);
EmployeeHourlyWage d = new EmployeeHourlyWage("Kate", "See", 2, 5);
EmployeeFixedPayment e = new EmployeeFixedPayment("Lisa", "Lee", 7, 500);
EmployeeFixedPayment f = new EmployeeFixedPayment("Mike", "Ree", 10,
450);
EmployeeFixedPayment g = new EmployeeFixedPayment("Izia", "Kurz", 13,
1000);
EmployeeFixedPayment j = new EmployeeFixedPayment("Aisha", "Moore", 20,
800);
coll.add(a);
coll.add(b);
coll.add(c);
coll.add(d);
coll.add(e);
coll.add(f);
coll.add(g);
coll.add(j);
Collections.sort(coll);
// System.out.println(coll.size());
for (Employee i : coll) {
System.out.print(i.secondName + " ");
}
}
}
public class Employee {
String firstName;
String secondName;
int id;
public Employee(String firstName, String secondName,int id){
this.firstName = firstName;
this.secondName = secondName;
this.id = id;
}
public void printEmployee(){
System.out.println(firstName+" "+secondName+" "+id);
}
public String getSecondName() {
return secondName;
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
}
public class EmployeeFixedPayment extends Employee {
double fixedPayment;
public EmployeeFixedPayment(String firstName, String secondName, int id,
double salary) {
super(firstName, secondName, id);
fixedPayment = salary;
}
public double getSalary() {
return fixedPayment;
}
public void setSalary(double salary) {
fixedPayment = salary;
}
}
public class EmployeeHourlyWage extends Employee {
Double hourlyWage;
public EmployeeHourlyWage(String firstName, String secondName, int id, double hourlyRate) {
super(firstName, secondName, id);
hourlyWage = 20.8*8*hourlyRate;
}
public double getWage(){
return hourlyWage;
}
public void setWage(double rate) {
hourlyWage = 20.8*8*rate;
}
}
Трюк здесь заключается в том, чтобы вытащить соответствующую информацию (то есть месячную зарплату) до базового класса (Employee
), чтобы вы могли написать для нее Comparator
.
Итак, сначала примените соответствующий метод до Employee
. Поскольку Employee
не содержит логики для расчета своей зарплаты, это сделает класс abstract
:
public abstract class Employee {
public abstract double getMonthlySalary();
// Rest of the members and methods you declared
}
public class EmployeeFixedPayment extends Employee {
double fixedPayment;
@Override
public double getMonthlySalary() {
return fixedPayment;
}
// Rest of the members, ctots, etc. you declared
}
public class EmployeeHourlyWage extends Employee {
double hourlyWage;
@Override
public double getMonthlySalary() {
return hourlyWage * 20.8 * 8;
}
// Rest of the members, ctots, etc. you declared
}
Теперь, когда все Employee
раскрывают свою зарплату в согласованном интерфейсе, их можно сортировать, внедряя Comparator
:
public class EmployeeComparator implements Comparator<Employee> {
@Override
public int compare (Employee e1, Employee e2) {
// Note we're comparing e2 to e1 to get a descneding effect
int salaryCompare = Double.compare(e2.getMonthlySalary(), e1.getMonthlySalary());
if (salaryCompare != 0) {
return salaryCompare;
}
// If the salaries are equal, compare names
return e1.getName().compareTo(e2.getName());
}
}
Теперь, чтобы собрать все это вместе, мы просто сортируем List
с нашим обычным Comparator
:
List<Employee> coll = new ArrayList<>();
Collections.sort(coll, new EmployeeComparator());
Внедрите интерфейс Comparable
для Employee
. Таким образом, они упорядочивают правильный путь, когда вы вызываете Collections.sort(coll)
.
Лично я считаю класс CompareToBuilder
полезным для этого.
Employee
.