2016-12-10 6 views
0

Итак, скажем, у меня есть класс Person и сделано несколько объектов этого класса. Затем я создаю карту, которая содержит Person как Key и String как Value. Я хочу, чтобы сделать метод, который принимает имя и выглядит для человека с этим именем, а затем печатает значение ключа, который имел это имяКогда ключ в картах является объектом, как мне искать атрибут этого объекта?

Вот мой код:

import java.util.HashMap; 
import java.util.Map; 

public class Ex03{ 

public static void main(String[] args) { 

    new Ex03(); 

} 

public Ex03(){ 

    Person person1 = new Person("Name1", "LastName1", "Address1"); 
    Person person2 = new Person("Name2", "LastName2", "Address2"); 
    Person person3 = new Person("Name3", "LastName3", "Address3"); 
    Person person4 = new Person("Name4", "LastName4", "Address4"); 

    Map<Person, String> map = new HashMap<>(); 
    map.put(person1, "12345678901"); 
    map.put(person2, "12345678902"); 
    map.put(person3, "12345678903"); 
    map.put(person4, "12345678904"); 

    findNumber(map, "Name1"); 

} 

public void findNumber(Map<Person, String> map, String name){ 

} 


class Person { 
    String name, lastName, address; 

    public Person(){ 

    } 

    public Person(String name, String lastName, String address){ 

     this.name = name; 
     this.lastName = lastName; 
     this.address = address; 

    } 

    @Override 
    public String toString() { 
     return "Person [name=" + name + ", lastName=" + lastName + ", address=" + address + "]"; 
    } 



} //end of class Person 

} 

Как я сделать метод findNumber()? Recap: введите имя строки, метод найдет объект Person, который имеет это имя, выдает значение, которое привязано к ключу лица, в котором есть имя, которое мы ввели. Заранее спасибо

ответ

0

Если вы не храните отдельную карту имен до Person объектов, вам необходимо пройти по карте keySet, сравнивая каждую клавишу с строкой.

0

Затем я создаю карту, которая удерживает Person в качестве ключа и строку как значение. Я хочу сделать метод, который принимает имя и выглядит для лица с , что имя и затем печатает значение ключа, которое было, что имя

Оба ваши требования противоречивы, так, чтобы сделать его проще, вы можете сохранить ключ как name значение как Person объект и значение как ключ (т. е. вы делаете его обратный порядок) в HashMap.

Вариант (1): имя в качестве ключа и лица в качестве значения в HashMap

Это то, что в целом мы делаем то есть объекты, отображение в простой ключ, как String, Integer и т.д.

Map<String,Person> map = new HashMap<>(); 
map.put("John", person1); 
//add other objects 

Теперь посмотрим на findNumber() ниже:

public void findNumber(Map<Person, String> map, String name){ 
    Person person = map.get(name); 
} 

Option (2): Человек, как ключ и имя а s Значение в HashMap

Map<Person, String> map = new HashMap<>(); 
map.put(person1, "John"); 
//add other objects 

Теперь посмотрим на findNumber() ниже:

public void findNumber(Map<Person, String> map, String name){ 
     Set<Person> keys = map.keySet(); 
     for(Person person : keys) { 
      if(person.getName().equals(name)) { 
       String name = map.get(person); 
       break; 
      } 
     } 
} 

Для этого варианта (2) для работы, вам необходимо переопределение equals() и hashcode() внутри Person класса.

Кроме того, в качестве примечания, помните, что Конструкторов предназначены для инициализации переменного экземпляра, и вы пишете слишком много логики внутри конструкторов внутри коды (как Ex03()), которая не является лучшей практикой.

0

Изменить код, как указано ниже ...

public Ex03(){ 

    Person person1 = new Person("Name1", "LastName1", "Address1"); 
    Person person2 = new Person("Name2", "LastName2", "Address2"); 
    Person person3 = new Person("Name3", "LastName3", "Address3"); 
    Person person4 = new Person("Name4", "LastName4", "Address4"); 

    Map<String, Person> map = new HashMap<>(); 
    map.put("Name1", person1); // or map.put(person1.name, person1); 
    map.put("Name2", person2); 
    map.put("Name3", person3); 
    map.put("Name4", person4); 

    findPerson(map, "Name1"); 

} 

public Person findPerson(Map<String, Person> map, String name){ 
    Person person = map.get(name); 
} 

Edit:

Если вы хотите сохранить номер человека, то вы должны добавить его в лицо класса, как показано ниже.

public Ex03(){ 

    Person person1 = new Person("Name1", "LastName1", "Address1", "12345678901"); 
    Person person2 = new Person("Name2", "LastName2", "Address2", "12345678902"); 
    Person person3 = new Person("Name3", "LastName3", "Address3", "12345678903"); 
    Person person4 = new Person("Name4", "LastName4", "Address4", "12345678904"); 

    Map<String, Person> map = new HashMap<>(); 
    map.put("Name1", person1); // or map.put(person1.name, person1); 
    map.put("Name2", person2); 
    map.put("Name3", person3); 
    map.put("Name4", person4); 

    String number = findNumber(map, "Name1"); 

} 

public String findNumber(Map<String, Person> map, String name){ 
    String number = map.get(name).number; 
} 

class Person { 
    String name, lastName, address, number; 

    public Person(){ 

    } 

    public Person(String name, String lastName, String address, String number){ 

     this.name = name; 
     this.lastName = lastName; 
     this.address = address; 
     this.number = number; 
    } 

    @Override 
    public String toString() { 
     return "Person [name=" + name + ", lastName=" + lastName + ", address=" + address + ", number=" + number"]"; 
    }  

} //end of class Person 

 Смежные вопросы

  • Нет связанных вопросов^_^