2009-02-12 2 views
0

Я хочу получить все значения, связанные с ключом на карте. Для например,Как получить все значения, связанные с ключом?

Map tempMap = new HashMap(); 
tempMap.put("1","X"); 
tempMap.put("2","Y"); 
tempMap.put("3","Z"); 
tempMap.put("1","ABC"); 
tempMap.put("2","RR"); 
tempMap.put("1","RT"); 

Как получить все значения, связанные с ключом 1?

ответ

3

Что вы можете сделать это:

Map<String, List<String>> tempMap = new HashMap<String, List<String>>(); 
tempMap.put("1", new LinkedList<String>()); 
tempMap.get("1").add("X"); 
tempMap.get("1").add("Y"); 
tempMap.get("1").add("Z"); 

for(String value : tempMap.get("1")) { 
    //do something 
} 

Это compartmentalizes значения, соответствующие клавиши «1» в свой собственный список, который вы можете легко получить доступ. Просто не забудьте инициализировать список ... еще NullPointerException s придет, чтобы вас достать.

Юваль = 8-)

7

вещь, которую вы должны понять, что в карте, ключ является уникальным.

, что означает, что после того, как

tempMap.put("1","X"); 

"1" отображается на "Х"

и после

tempMap.put("1","ABC"); 

"1" отображается "ABC", а предыдущее значение («X»)

+0

@Anand: если вам нужно сопоставить один и тот же ключ с несколькими строками, используйте Collection как значение. I.e., определите свою карту примерно так: Карта > tempMap. – Jonik

3

Я думаю, вам не хватает чего-то важного:

Map tempMap = new HashMap(); 
tempMap.put("1","X"); 
tempMap.put("2","Y"); 
tempMap.put("3","Z"); 
tempMap.put("1","ABC"); // replaces "X" 
tempMap.put("2","RR"); // replaces "Y" 
tempMap.put("1","RT"); // replaces "ABC" 

Кроме того, вы должны использовать дженерики, где это возможно, так что ваша первая линия должна быть:

Map<String, String> tempMap = new HashMap<String, String>(); 
5

От HashMap Javadoc:

public V put(K key, V value) 

Связывает указанное значение с указанным ключ на этой карте. Если в карте ранее содержалось отображение для ключа, то старое значение заменяется.

1

Для этого нужно связать каждый ключ с набором значений, с соответствующей логикой для создания набора и ввода/удалить значения из него вместо простого положить() и получить() на карте.

Или вы можете использовать одну из готовых реализаций Multimap, таких как one in Apache commons.

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