2012-03-03 5 views
0

У меня есть этот метод здесь, который получает объект из JList. Тогда объект будет строкой, которая соответствует определенным значениям в хэш-карте. Например, есть несколько значений.display set hashmap в соответствии со значением

Course1 - John 
Course2 - John 
Course3 - Mary 
Course4 - Mary 

есть какие-либо способы петли через HashMap и искать определенное значение, а затем поместить оба ключ & значения в строку, которая затем может быть добавлена ​​к модели списка?

ответ

1

Если вы ищете только значения, используйте метод keySet() для hashmap, чтобы получить ключи, а затем прокрутите их, чтобы получить соответствующие значения.

for(String key : hashMap.keySet()) 
    { 
    String value = hashMap.get(key); 

    if(searchString.equals(value)) 
     { 
      String keyAndValue = key + value; // this is what you want 
     }  
    } 

Если вы ищете обоих ключей и значений, используйте метод entrySet() из HashMap, чтобы получить записи, а затем петлю через них, чтобы посмотреть на матч.

for(Map.Entry<String, String> entry : hashMap.entrySet()) 
    { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 

    if(searchString.equals(key) || searchString.equals(value)) 
     { 
      String keyAndValue = key + value; // this is what you want 
     }  
    } 
+0

Он хочет, чтобы искать по ** *стоимость***. Вы просто переопределили 'get()' как линейный (O (n)) поиск. –

+0

Хорошо, я внесу изменения. Я предположил, что он хочет искать по ключевым словам и ценностям. – CodeBlue

+1

На самом деле CodeBlue предоставил совершенно рабочий код. Вы спасатель жизни! – cataschok

1

Используйте метод поиска, который перебирает карту и возвращает список совпадений:

public static ArrayList <String> searchMap (HashMap map, String value) 
{ 
    ArrayList <String> matchesFound = new ArrayList <String>(); 
    Iterator it = map.entrySet().iterator(); 
    while (it.hasNext()) 
    { 
     Map.Entry entry = (Map.Entry) it.next(); 
     if (entry.getValue() == value) 
      matchesFound.add(entry.getKey() + " : " + entry.getValue()); 
    } 
    return matchesFound; 
} 

Пример использование с заполненными данными Hashmap:

public static void main (String [] args) 
{ 
    HashMap < String, String > map = new HashMap < String, String >(); 
    map.put("Course1", "John"); 
    map.put("Course2", "John"); 
    map.put("Course3", "Mary"); 
    map.put("Course4", "Mary"); 
    System.out.println(searchMap(map, "Mary")); 
} 
+0

Он хочет найти *** значение ***. Вы просто переопределили 'get()' как линейный (O (n)) поиск, хотя ваше решение можно было легко устранить. –

+0

@JimGarrison просмотрите мое сообщение, пожалуйста. – Juvanis

+0

Мне нужно отобразить все соответствующие записи ключа/значения для входного значения. Таким образом, код, предоставляемый codeblue, отлично работает. Тем не менее, я буду держать ваш метод в виду, если что-то в этом роде может возникнуть в будущем. – cataschok

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