Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要使用salary from Emploee类从农场对象列表创建一个映射_Java_Oop_Hashmap - Fatal编程技术网

Java 我需要使用salary from Emploee类从农场对象列表创建一个映射

Java 我需要使用salary from Emploee类从农场对象列表创建一个映射,java,oop,hashmap,Java,Oop,Hashmap,这是我到目前为止为我需要做的其他事情编写的代码。主要的问题是,即使有这么多的信息,我也不知道怎么做 从农场列表创建一个映射,该列表具有与薪资相同的键和与具有该薪资的员工列表相同的值。显示地图内容,并为每个员工显示工作所在的农场 public class Employee implements Comparable<Employee> { private String name; private Integer salary; public Employee (String name

这是我到目前为止为我需要做的其他事情编写的代码。主要的问题是,即使有这么多的信息,我也不知道怎么做

从农场列表创建一个映射,该列表具有与薪资相同的键和与具有该薪资的员工列表相同的值。显示地图内容,并为每个员工显示工作所在的农场

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类Employee实现了可比较的{
私有字符串名称;
私人整数工资;
公共雇员(字符串名称,整数工资){
this.name=名称;
这个。薪水=薪水;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共无效设置薪资(整数薪资){
这个。薪水=薪水;
}
公共整数getSalary(){
返回工资;
}
公共字符串toString(){
返回名称+“”+薪资;
}
公共内部比较(员工环境管理计划){
返回此.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);
}
公共类场{
私有字符串名称;
私有整数曲面;
List emp=new ArrayList();
公共场(字符串名称,整数曲面){
this.name=名称;
这个表面=表面;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共void设置曲面(整数曲面){
这个表面=表面;
}
公共int getSurface(){
返回面;
}
公共字符串toString(){
返回名称+“”+曲面;
}
公共void生成列表(字符串ename,整数esalary){
本emp.add(新员工(ename,esalary));
}
public void getList(){
对于(员工el:emp)
系统输出打印项次(el);
}
公共雇员GetMostPaideEmployee(){
返回集合。最大值(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);


}
publicstaticvoidmain(字符串参数[])
{
List FarmList=new ArrayList();
农场1=新农场(“Tiguana”,700);
farm1.makeList(“Mihai”,30000);
farm1.名单(“Vladimir”,4000);
farm1.品牌列表(“Tusnic”,3000);
farm1.getList();
System.out.println(farm1.getMostPaidEmployee());
农场2=新农场(“Tipirei”,800);
farm2.名单(“Mihai”,30000);
farm2.品牌列表(“Mihail”,40000);
farm2.名单(“Armando”,50000);
farm2.名单(“ASihai”,60000);
System.out.println(farm2.getmostPaideEmployee());
农场列表。添加(农场2);
农场列表。添加(农场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);
  }
}
Map Map=newhashmap();
对于(农场f:农场列表){
对于(员工e:f.emp){
如果(!map.containsKey(如工资)){
map.put(如salary,newarraylist());
}
map.get(e.salary)、add(e);
}
}
确保将FarmName字段添加到employee中,并重写employee类中的toString()方法,以便显示所请求的内容

Map
听起来您想构建一个
映射
。类型(object,而不是primitive
int
)的键是salary。该值是具有该特定薪资的员工的
列表

所以您需要实例化这样一个,可能是一个,或者可能是一个,比如。然后,当您循环员工时,您会看到他们的工资是否已添加为地图的关键。如果不是,则将工资添加为键,并创建一个空的
列表
对象作为值。将该特定员工添加到新列表中。如果薪资已经存在,则检索列表,添加员工

要按农场报告,您需要找到哪个农场雇用了该员工。您将循环映射的键,对于每个键检索其员工列表,然后循环这些员工。对于每个员工,循环所有农场,检索每个农场的员工列表,并查看目标员工是否在该列表中。如果是这样,您知道地图上列表中员工的农场

代码中的一个缺陷是按工资定义
员工的
比较。凭直觉我们可以看出,这闻起来不对。相反,您应该在每个员工身上都有一个标识符,就像大多数公司为每个员工分配一个“员工id”。为了便于练习,我只使用
UUID
作为id。将
UUID
类型的成员字段添加到
Employee
类中。使用该对象定义
compareTo

因为这显然是家庭作业,我想我已经说得够多了。你应该能根据我的文章来理解这一点。您还可以在堆栈溢出中搜索许多以列表作为值的映射示例以及其他类似问题

在实际工作中,我们可能会关注一些问题。但我想这不是你学校作业的一部分


另请参见我作为问题注释发布的编码风格提示。

Tip:makeList
中的术语“make”建议实例化一个全新的列表,这不是您正在做的。该方法的更好名称是
addEmployee
。或者只需添加
Employee
所需的参数类型就可以了。提示:遵循Java编码惯例,它将帮助您阅读代码。所以
List FarmList
应该是
List FarmList
。大写字母的首字母表示类,而小写字母的首字母表示实例。