java значения карты из объекта - PullRequest
1 голос
/ 16 апреля 2020

Я новичок в коллекциях и ищу помощь. Я пытаюсь найти карту с помощью ключа и вернуть значения ключа из другого объекта. Пока это мой код.

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», и, если он найден, он показывает мне возраст, местоположение и название должности этого человека, но я действительно не уверен, как бы я go об этом.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

На мой взгляд, лучший способ go - это, как сказал Titulum , используя Optional. Я бы просто оставил другой путь, немного не такой хороший, но вы можете понять это лучше.

Вы можете Переопределить метод toString() в классе NewHire и использовать его или создать методы получения для свойств:

@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());
}
1 голос
/ 16 апреля 2020

Вы можете просто написать метод следующим образом:

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.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...