【问题标题】:sorting objects from different classes java从不同的类java中排序对象
【发布时间】:2014-05-30 14:48:33
【问题描述】:

我有以下任务。我坚持问题a)。 创建类,描述具有小时工资和固定工资的员工。提出你的建议 关于类之间的关系。实施平均月工资计算方法。为了 有小时工资的员工使用下一个公式:“平均月薪= 20.8*8* 小时工资”,对于员工 固定工资——“平均月薪=固定月工资”。编写注释良好的代码 解决下一个问题 a) 按平均月薪对员工集合进行降序排序。如果是 同工同酬——顾名思义。从集合中写下所有员工的 ID、姓名和月薪。 b) 写出收集到的前五名员工的信息(问题 a)。 c) 写入集合中最后三个员工的 ID(问题 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;
    }

}

【问题讨论】:

  • 使用多态集合。

标签: java class sorting collections


【解决方案1】:

Employee 实现Comparable 接口。这样,当您致电 Collections.sort(coll) 时,他们会以正确的方式进行排序。

我个人觉得CompareToBuilder 类对此很有帮助。

【讨论】:

  • 好的,但是我应该只为 Employee 类还是子类实现 Comparable?
  • 你应该在Employee上实现它。
【解决方案2】:

这里的诀窍是将相关信息(即月薪)拉到一个基类(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
}

现在所有Employees 都在一个连贯的界面中公开他们的薪水,他们可以通过实现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());
    }
}

现在,总而言之,我们只需使用自定义的ComparatorList 进行排序:

List<Employee> coll = new ArrayList<>();
Collections.sort(coll, new EmployeeComparator());

【讨论】:

  • 这是使用抽象方法的好主意!多谢。一切正常!
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多