我需要从Farm类的Employee类中获取最大值

时间:2019-02-09 18:07:19

标签: java

我需要找到并显示农场中薪水最高的员工。  这就是我到目前为止所得到的

public class Employee implements Comparable<Employee> {
private String name;
private Integer salary;

public Employee (String name , Integer salary) {
    this.name = name;
    this.salary = salary;
}
public void setName(String name) {
    this.name = name;
}
public String getName() {
    return name;
}
public void setSalary(Integer salary) {
    this.salary = salary;
}
public Integer getSalary() {
    return salary;
}
public String toString() {
    return name + " " + salary;
}
public int compareTo(Employee emp) {
    return this.salary.compareTo(emp.getSalary());
}

}

员工类别

public class Farm {
private String name;
private Integer surface;

List<Employee> emp = new ArrayList<Employee>();


public Farm(String name , Integer surface) {
    this.name =  name;
    this.surface = surface;
}
public void setName(String name) {
    this.name = name;

}
public String getName() {
    return name;
}
public void setSurface(Integer surface) {
    this.surface = surface;
}
public int getSurface () {
    return surface;
}
public String toString() {
    return name + " " + surface;
}
public void makeList(String ename , Integer esalary) {
    this.emp.add(new Employee(ename,esalary));
}
public void getList() {
    for(Employee el : emp)
        System.out.println(el);
}

}

最后一个是主要的。问题是我不知道如何拥有更多的农场,并从每个农场中获取最大的农场。你们可以帮我吗?

这是我的mainapp

public class Mainapp {
public static void main(String args[])
{
    List <Farm> FarmList = new ArrayList<Farm>();
    FarmList.add(new Farm("unirea pizdii", 890030));
    FarmList.add(new Farm("pseudo autsm",78594));
    FarmList.add(new Farm("haha hihi",854856099));

    Farm farm1 = new Farm("Tiguana" , 700);
    farm1.makeList("Mihai", 30000);
    farm1.makeList("Vladimir", 4000);
    farm1.makeList("Tusnic", 3000);
    farm1.getList();


    Employee emp1 =  new Employee(" mihai", 3000);
    System.out.println(emp1);
}

}

2 个答案:

答案 0 :(得分:1)

有多种方法可以用Java对列表进行排序,其中一种是Collections.sort(List),但在这种情况下,您似乎正在尝试从列表中检索最大值,因此无需添加额外的开销。

  

编辑: JB Nizet建议使用Collections.max(List)

     
public Employee getMostPaidEmployee() {
  return Collections.max(emp);
}

从列表中获得薪水最高的员工的一种方法是遍历他们,并将每个员工与先前“保存过”的薪水最高的员工进行比较:

// Farm.java
public Employee getMostPaidEmployee() {
  Employee mostPaid = null;

  // Initialize maximum to the lowest possible value.
  // If salaries can only be positive you could also initialize this to `0`.
  int maximumSalary = Integer.MIN_VALUE;

  for (Employee employee : emp) {
    if (employee.getSalary() > maximumSalary) {
      // Reset the most paid fields
      mostPaid = employee;
      maximumSalary = employee.getSalary();
    }
  }

  return mostPaid;
}

您可以在Farm类上声明此方法,因此即使您有Farm的多个实例,也可以调用它:

List<Farm> farms = new ArrayList<>();

// TODO Add farms

// Get the most paid employee in first farm
Employee mostPaid = farms.get(0).getMostPaidEmployee();

就性能而言,此方法是线性的,即O(n)

答案 1 :(得分:1)

要获得每个农场的最高工资,您可以使用流API:

import static java.util.stream.Collectors.*;

Map<Farm, Optional<Employee>> collect = 
        farmList.stream().collect(groupingBy(Function.identity(),
            flatMapping(farm -> farm.getEmployes().stream(), 
                   maxBy(Employee::compareTo))));

结果图以Farm作为键,而Employee以最高薪水为值

注意:flatMapping方法来自java9

相关问题