这是我到目前为止为其他需要做的事情编写的代码。主要的问题是,即使有这么多的信息,我也无法理解该怎么做。
从服务器场列表中创建一个地图,该地图具有相同的薪水键和具有相同的薪水的雇员列表。显示地图内容,并为每位员工显示正在工作的农场
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);
}
public Employee getMostPaidEmployee() {
return Collections.max(emp);
}
}
我主要的人
public static void main(String args[])
{
List <Farm> FarmList = new ArrayList<Farm>();
Farm farm1 = new Farm("Tiguana" , 700);
farm1.makeList("Mihai", 30000);
farm1.makeList("Vladimir", 4000);
farm1.makeList("Tusnic", 3000);
farm1.getList();
System.out.println(farm1.getMostPaidEmployee());
Farm farm2 = new Farm("Tipirei" , 800);
farm2.makeList("Mihai", 30000);
farm2.makeList("Mihail", 40000);
farm2.makeList("Armando", 50000);
farm2.makeList("ASihai", 60000);
System.out.println(farm2.getMostPaidEmployee());
FarmList.add(farm2);
FarmList.add(farm1);
}
答案 0 :(得分:2)
Map< Integer , List< Employee > >
听起来像您想要构建Map< Integer , List< Employee > >
的声音。类型为Integer
(对象而不是原始的int
)的键是工资。 值是List
名具有特定工资的员工。
因此,您需要实例化这样的Map
,可能是HashMap
,或者也许是SortedMap
,例如TreeMap
。然后,当您循环播放员工时,您会看到他们的薪水是否已被添加为地图的键。如果不是,则将薪金作为关键字,并创建一个空的List
对象作为值。将该特定员工添加到新列表中。如果工资已经存在,请检索列表,然后添加员工。
要按服务器场进行报告,您需要找到雇用该员工的服务器场。您将循环映射的键,为每个键检索其雇员列表,然后循环这些雇员。对于每个员工,循环所有服务器场,并检索每个服务器场的员工列表,并查看目标员工是否在该列表中。如果是这样,您会在地图上的列表中知道该员工的农场。
代码中的一个缺陷是按薪水在compareTo
上定义了Employee
。凭直觉我们可以分辨出气味不对。相反,您应该在每个员工上都有一个标识符,就像大多数任何公司都为雇用的每个人分配一个“员工ID”一样。为了您的锻炼,我只使用UUID
作为ID。将类型为UUID
的成员字段添加到您的Employee
类中。使用该对象定义compareTo
。
由于这显然是家庭作业,我想我已经说够了。您应该能够按照我的散文弄清楚这一点。您还可以在Stack Overflow上搜索许多带有列表作为值的地图示例以及其他此类问题。
在实际工作中,我们可能会关注concurrency问题。但是我认为这不是您学校作业的一部分。
另请参阅我作为“问题评论”发布的编码样式提示。
答案 1 :(得分:1)
这就是您要这样做的方式:
Map<Integer, List<Employee>> map = new HashMap<>();
for(Farm f : FarmList){
for(Employee e : f.emp){
if(!map.containsKey(e.salary)){
map.put(e.salary, new ArrayList<>());
}
map.get(e.salary).add(e);
}
}
请确保将FarmName字段添加到您的员工,并覆盖Employee类中的toString()方法,以便您可以显示要求的内容。