如何从地图中恢复和显示对象

时间:2015-08-13 13:32:48

标签: java dictionary

我正在尝试使用Map来编写一个程序,以便根据员工的爱好来映射员工的详细信息。该程序应将员工及其业余爱好的详细信息作为输入,然后将其作为键/值对存储在地图中。一旦添加了详细信息,用户就应该能够列出所有员工及其爱好,并且还应该能够查看特定员工(通过提供员工ID作为输入),详细信息和他/她的爱好。此外,用户应该能够根据员工的ID删除员工。

我试过如下。但方法'deleteEmployee()','isEmployeePresent()'和'displayEmployees()'是错误的

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

class Employee {
    String designation, name;
    Date dob;
    int employeeID;
    float salary;

    public Employee(String designation, Date dob, int employeeID, String name,
            float salary) {
        this.designation = designation;
        this.dob = dob;
        this.employeeID = employeeID;
        this.name = name;
        this.salary = salary;
    }

    public String getDesignation() {
        return designation;
    }

    public Date getDob() {
        return dob;
    }

    public int getEmployeeID() {
        return employeeID;
    }

    public String getName() {
        return name;
    }

    public float getSalary() {
        return salary;
    }

    public void setDesignation(String designation) {
        this.designation = designation;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }

    public void setEmployeeID(int employeeID) {
        this.employeeID = employeeID;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSalary(float salary) {
        this.salary = salary;
    }
}

class Hobby {
    String hobbyDescription, hobbyName;

    public Hobby(String hobbyName, String hobbyDescription) {
        this.hobbyName = hobbyName;
        this.hobbyDescription = hobbyDescription;
    }

    public String getHobbyName() {
        return hobbyName;
    }

    public String getHobbyDescription() {
        return hobbyDescription;
    }

    public void setHobbyName() {
        this.hobbyName = hobbyName;
    }

    public void setHobbyDescription() {
        this.hobbyDescription = hobbyDescription;
    }
}

public class EmployeeManagement {
    public static void main(String args[]) {
        HashMap<Employee, Hobby> hm1 = new HashMap<Employee, Hobby>();
        Scanner sc1 = new Scanner(System.in);
        System.out.println("How many names do you want to add to the system? ");
        int w = sc1.nextInt();
        EmployeeManagement ob = new EmployeeManagement();
        ob.addEmployees(w, hm1);
        ob.displayEmployees(hm1);
        while (true) {
            System.out.println("1. Delete an employee");
            System.out
                    .println("2. Check whether an employee is present or not");
            System.out.println("3. Break the loop and terminates the program");
            int ch = sc1.nextInt();
            switch (ch) {
            case 1:
                System.out.println("Enter Employee-I'd:");
                int p = sc1.nextInt();
                ob.deleteEmployee(p, hm1);
                ob.displayEmployees(hm1);
                break;
            case 2:
                System.out.println("Enter Employee-I'd:");
                int q = sc1.nextInt();
                boolean b = ob.isEmployeePresent(q, hm1);
                if (b == true)
                    System.out.println("The employee is present");
                else
                    System.out.println("The employee is not present");
                break;
            case 3:
                return;
            }
        }
    }

    public void addEmployees(int n, Map<Employee, Hobby> abc) {
        Scanner sc = new Scanner(System.in);
        Employee[] obj1 = new Employee[n];
        Hobby[] obj2 = new Hobby[n];
        for (int i = 0; i < n; i++) {
            System.out.println("Enter Employee name:");
            String nm = sc.next();
            System.out.println("Enter designation:");
            String des = sc.next();
            System.out.println("Enter employeeI-D:");
            int eId = sc.nextInt();
            System.out.println("Enter salary:");
            double sl1 = sc.nextDouble();
            float sl = (float) sl1;
            System.out.println("Enter Hobby-name:");
            String hnm = sc.next();
            System.out.println("Enter Hobby-description");
            String hdes = sc.next();
            System.out.println("Enter date-of-birth:");
            String dt1 = sc.next();
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            try {
                Date dt = formatter.parse(dt1);
                obj1[i] = new Employee(des, dt, eId, nm, sl);
                obj2[i] = new Hobby(hnm, hdes);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            abc.put(obj1[i], obj2[i]);
        }
    }

    public void deleteEmployee(int id, Map<Employee, Hobby> m1) {
        if (m1.containsKey((Employee.getEmployeeID()) == id))
            m1.remove(Employee);
    }

    public boolean isEmployeePresent(int id, Map<Employee, Hobby> m2) {
        if (m2.containsKey((Employee.getEmployeeID()) == id))
            return true;
        else
            return false;
    }

    public void displayEmployees(Map<Employee, Hobby> hm) {
        for (Map.Entry<Employee, Hobby> m : hm.entrySet()) {
            System.out.println(m.getKey() + " " + m.getValue());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您正试图以静态方式访问Employee方法:

if(m1.containsKey((Employee.getEmployeeID())==id))
//                 ↑ here

您必须在地图中获取Employee的实例,然后与给定的ID进行比较:

public void deleteEmployee(int id,Map<Employee,Hobby> m1) {
    // iterate in the map searching for the id
    for (Entry<Employee, Hobby> entry : map.entrySet()) {
        Employee e = entry.getKey();   // here you have the employee
        Hobby h = entry.getValue();    // here you have the hobby

        // check if this employee have same id than given
        if(e.getEmployeeID() == id) { // map contains the employee
            m1.remove(e);
    }
}

注意:

  • 我建议您返回一个布尔值来检查员工是否已更新,删除等...... public boolean deleteEmployee(int id,Map<Employee,Hobby> m1)

  • 我会以另一种方式保留员工,HashMap不允许重复,因此如果您不将Hobby声明为HashMap<Employee, List<Hobby>>,则不能在每个员工中保存<script>myproject.somepage.init();</script> 1}}。