2015-01-09 3 views
2

Это моя программа, может кто-нибудь, пожалуйста, скажите мне, как я могу получить ключ карты на основе значения.Как получить ключ от карты, основанный на значении

Я попытался, как

String vendor_name = map.get("value"); 

Но его returing меня нулевой

import java.util.Collections; 
import java.util.HashMap; 

public class Test { 

    public static void main(String args[]) { 

     HashMap<String, String> for_highest_price_vendor = new HashMap<String, String>(); 

     for_highest_price_vendor.put("vendor1", "20"); 
     for_highest_price_vendor.put("vendor2", "25"); 
     String maxValueInMap = (Collections.max(for_highest_price_vendor 
       .values())); // This will return max value in the Hashmap 

     String vendor_name = for_highest_price_vendor.get(maxValueInMap); 

     System.out.println(vendor_name); 

    } 

} 
+1

related: http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value – FourScore

+2

Сопоставление является одним из способов, поэтому у вас есть итерация по всем ключам, чтобы получить один вам нужно (и мы предположили, что пары KV равны 1: 1). – meskobalazs

+4

Что делать, если есть два разных ключа с одинаковым значением? Какой ключ вы хотели бы иметь? –

ответ

3

Там нет обратного преобразования.

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

Конечно, несколько ключей могут иметь равное значение!

Например:

Map<String, String> foo = new HashMap<String, String>(); 
foo.put("foo", "bar"); 
for (Map.Entry<String, String> entry: foo.entrySet()) { 
    if (entry.getValue().equals("bar")) { 
     System.out.println(entry.getKey()); 
     break; // or not, you may want to add to a Collection and return it once the loop is completed 
    } 
} 
+6

И если картирование не 1: 1, вам необходимо позаботиться о тех же самых ценных предметах! – meskobalazs

+0

@meskobalazs да, см. Мое редактирование. – Mena

2

можно сделать вручную итерации, или использовать один из Apache Common Collections Libraries.
Interface BidiMap <K,V> - это двунаправленная карта, позволяющая сопоставлять ключ со значением, а также до сопоставить значение с ключом (используя метод getKey();).

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