【问题标题】:java map values from an objectjava映射对象的值
【发布时间】:2020-04-16 13:45:37
【问题描述】:

我是收藏新手,正在寻求帮助。我正在尝试使用键搜索地图,并返回来自另一个对象的键的值。这是我目前的代码。

public class Employer {
    Map<String, NewHire> employee = new HashMap<>();
}

public void addEmployee(String fullName, String age, String location, String JobTitle) {
    NewHire newEmployee = new NewHire(age, location, JobTitle);
    this.employee.put(fullName, newEmployee);
}

另一个对象的代码是 -

public class NewHire {
    private String age;
    private String location;
    private String jobTitle;
}

public NewHire(String aAge, String aLocation, String aJobTitle) {
    this.age = aAge;
     this.location = aLocation;
     this.jobTitle = aJobTitle;
}

然后我就这样创建 -

Employer CompanyA = new Employer();

CompanyA.addEmployee("JohnSmith", "23", "London", "Service Desk");

我想创建一个方法,可以在地图上搜索用户指定的键,在本例中为“JohnSmith”,如果找到,它会显示那个人的年龄、位置和职位,但我真的是不知道我会怎么做。

【问题讨论】:

    标签: java object hashmap


    【解决方案1】:

    在我看来,最好的方法是 Titulum 所说的,使用 Optional。 我只是离开另一种方式,有点不太好,但你可能会更好地理解它。

    您可以重写 NewHire 类中的 toString() 方法并使用它,或者为属性创建 getter:

    @Override
    public String toString(){
       return String.format("Age: %s\nLocation: %s\nJobTitle: %s", age, location, jobTitle);
    }
    
    // getters
    public String getJobTitle() {
        return jobTitle;
    }
    
    public String getLocation() {
        return location;
    }
    
    public String getAge() {
        return age;
    }
    

    在您的Employer 课程中,如果您想使用不太好的方法(尽管我建议使用可选):

    public NewHire getEmployeeByName(String fullName){
        return employee.get(fullName);
    } 
    

    然后使用它:

    Employer employer = new Employer();
    employer.addEmployee("JohnSmith", "23", "London", "Service Desk");
    
    NewHire newHire = employer.getEmployeeByName("sJohnSmith");
    
    if(newHire != null) {
        System.out.println(newHire.toString());
    
        // using getters
        System.out.println(newHire.getAge());
        System.out.println(newHire.getJobTitle());
        System.out.println(newHire.getLocation());
    }
    

    【讨论】:

    • 不需要为System.out.println()显式调用toString(),因为println()的重载方法之一将Object作为参数并且在内部,如果传递的对象是不为空,否则只是“空”。所以,如果目的只是打印,也不需要显式的空检查
    • 到目前为止,我们还没有被教过 Optional(稍后会介绍),所以我暂时无法使用它:(
    • @NewtoJavaHelp 然后你可以这样使用,如果你不想使用 toString() 方法,你可以为所有属性创建 getter 并使用它们。
    • @NewtoJavaHelp 如果答案解决了您的问题,请将其标记为解决方案。谢谢!
    【解决方案2】:

    你可以简单的写方法如下:

    public Optional<NewHire> findByFullName(String fullName) {
      return Optional.ofNullable(employee.get(fullName));
    }
    

    这将返回一个Optional,它是Java 中的一个对象,它包含一些东西或什么都没有。查看Optional 是否包含您可以执行的操作:

    Optional<NewHire> possiblyFoundNewHire = findByFullName("SomeName");
    possibleFoundNewHire.ifPresent(newHire -> {
      System.out.println(newHire); // Or formatted as you would like.
    });
    

    【讨论】:

    • 到目前为止,我们还没有被教过 Optional(稍后会介绍),所以我暂时无法使用它:(
    猜你喜欢
    • 2019-04-07
    • 2018-08-13
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2019-09-19
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多