2014-10-13 6 views
0

Текущая проблема: Я создал HashMap для сохранения и получения некоторых ключей и значений. но я не уверен, как получить все значения по определенному имени (String). На данный момент он печатает все значения из Hashmap, и это не то, чего я хочу достичь.Как распечатать все значения определенного ключа Hashmap

В приведенном ниже примере я использую следующие поля

Поля

String name 
// Object Example 

Метод HashMap

Map<String,Example> mapOfExampleObjects = new HashMap<String,Example>(); 

для уборной р для извлечения значений из HashMap по определенному имени ключа

for(Map.Entry<String,Example> entry: mapOfExampleObjects.entrySet()){ 
        if(mapOfExampleObjects.containsKey(name)) 
        { 
        System.out.println(entry.getKey() + " " + entry.getValue()); 
        } 
       } 

Токового выход

John + (Exampleobject) 
Ian + (Exampleobject) 
Ian + (Exampleobject) 
Jalisha + (Exampleobject) 

Выхода, что я хочу достичь

Ian + (Exampleobject) 
Ian + (Exampleobject) 
+0

Почему вы зацикливаете? У HashMap есть уникальные ключи. Один ключ, одно значение. –

+3

На каждый ключ всего 1 значение. key = значение не содержит нескольких записей с одним и тем же ключом. – brso05

+2

Если вам нужно несколько значений для одного ключа, вы должны использовать тип коллекции как значение. – August

ответ

4

Ларса, ваша проблема в этой строке:

  if(mapOfExampleObjects.containsKey(name)) 

Ваш mapOfExampleObjects всегда будет содержать ключ «Ian» каждый раз, когда вы проходите через цикл. То, что вы хотите, это больше похоже на:

if(name.equals(entry.getKey())) 
+1

да однако hmap все еще может держать один элемент за ключ –

+0

Да, очень верно. –

2

Вы можете извлечь keySet карты и манипулировать ею, чтобы выбрать элементы, которые вы хотите:

class Example { 

    final String name; 

    Example(String name) { 
     this.name = name; 
    } 

    public String toString() { 
     return name; 
    } 
} 

public void test() { 
    // Sample data. 
    Map<String, Example> mapOfExampleObjects = new HashMap<String, Example>(); 
    mapOfExampleObjects.put("John", new Example("John Smith")); 
    mapOfExampleObjects.put("Ian", new Example("Ian Bloggs")); 
    mapOfExampleObjects.put("Ian", new Example("Ian Smith")); 
    mapOfExampleObjects.put("Jalisha", new Example("Jalisha Q")); 
    // Using a Set you can extract many. 
    Set<String> want = new HashSet<String>(Arrays.asList("Ian")); 
    // Do the extract - Just keep the ones I want. 
    Set<String> found = mapOfExampleObjects.keySet(); 
    found.retainAll(want); 
    // Print them. 
    for (String s : found) { 
     System.out.println(mapOfExampleObjects.get(s)); 
    } 
} 

Обратите внимание, что это будет по-прежнему печатать только один Ian, так как Map сохраняет только одно значение против каждой клавиши. Вам нужно будет использовать другую структуру (возможно, Map<String,List<Example>>), чтобы сохранить несколько значений по каждому ключу.