2012-05-06 8 views
0

У меня есть HashMap, который держит studentIds в качестве ключа и студента объектов в качестве значений,Извлечение объектов из HashMap в Java?

HashMap<Integer, Student> hashMap = hashTables.buildHash(students); 

public static HashMap<Integer, Student> buildHash(Student[] students) { 
      HashMap<Integer, Student> hashMap = new HashMap<Integer, Student>(); 
      for (Student s : students) hashMap.put(s.getId(), s); 
      return hashMap; 
     } 

ниже код получает каждый KeyValue пара и s.getValue() возвращает студенческий объект, который состоит из идентификатора и строк имя, как я могу получить/распечатать эти значения (student.int, student.name);

for(Map.Entry s : hashMap.entrySet()) 
    System.out.print(s.getKey()+" "+s.getValue()); 

ответ

3

Вы просто должны использовать параметризованный тип для записи:

for(Map.Entry<Integer, Student> s : hashMap.entrySet()) 
    System.out.print(s.getKey()+" "+s.getValue().getId()+" "+s.getValue().getName()); 

(заметим, что это невозможно для класса, чтобы иметь поле с именем «Int», потому что это язык ключевое слово).

+0

@Marko Топольник: только потому, что я с помощью ОП синтаксис, нарушающий информацию о структуре его класса –

+0

Конечно, я понял юмористический аспект этого. Просто, что лучше помочь, чем издеваться :) Разум также, что в кодесе «HashMap» он использует геттер, поэтому, вероятно, его «id» и «name» являются частными, как и должно быть. –

3

Просто реализовать toString в Student и код размещен будет работать как есть:

public class Student { 
    ... 
    public String toString() { 
     return "ID = " + this.id + ", name = " + this.name; 
    } 
} 
+0

В любом случае я могу получить значения int и string объекта? –

+1

См. Ответ Майкла Боргвардта, он его охватывает. Дело в том, чтобы использовать параметры типа в объявлении 'Map.Entry'. Затем вы можете свободно писать 'e.getValue(). GetId()'. –

1

Вы можете добиться этого путем ..

for(Map.Entry<Integer, Student> s : hashMap.entrySet()){ 
    System.out.print(Long.valueof(s.getKey())+""+String.valueof(s.getValue().getName())); 
}