получить строковое значение из HashMap в зависимости от имени ключа

123

У меня есть HashMapразные ключи и значения, как мне получить одно значение?

У меня есть ключ на карте с именем my_code, он должен содержать строку, как я могу просто получить его, не перебирая карту?

Пока у меня есть ..

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

Я ожидаю увидеть String, например, "ABC" или "DEF", так как это то, что я вставил туда изначально, но если я сделаю это, System.out.println()я получаю что-то вродеjava.lang.string#F0454

Извините, я не слишком знаком с картами, как вы, наверное, догадались;)

Джимми
источник

Ответы:

166

Просто использовать Map#get(key)?

Object value = map.get(myCode);

Вот руководство по картам, которое может вам пригодиться: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

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

Я ожидаю увидеть строку, такую ​​как «ABC» или «DEF», поскольку это то, что я вставил туда изначально, но если я сделаю System.out.println (), я получу что-то вроде java.lang.string # F0454

Извините, я не слишком знаком с картами, как вы, наверное, догадались;)

Вы видите результат Object#toString(). Но java.lang.Stringдолжен уже один реализован, если вы не создали пользовательскую реализацию с строчной sв имени java.lang.string. Если это на самом деле настраиваемый объект, вам нужно переопределить, Object#toString()чтобы получить «читаемую человеком строку» всякий раз, когда вы выполняете операцию System.out.println()или toString()на желаемом объекте. Например:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
BalusC
источник
1
Конечно, если вы создаете собственный строковый класс, я бы рекомендовал (1) этого не делать, поскольку это, вероятно, не то, что вы хотите сделать, и (2) если вы собираетесь это сделать, НЕ помещайте его в java.lang пространство имен.
MatrixFrog 01
1
если HashMap <String, String> newMap = new HashMap <String, String> (); как получить строковый элемент из этого ...? где String value = newMap.get ("my_code"); выдает ошибку
saidesh kilaru
как можно инвертировать? получить ключ от значения?
58

Если вы храните ключи / значения в виде строк, это будет работать:

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");

Вопрос в том, что заполняется в HashMap (ключ и значение)

Джефф Портер
источник
если HashMap <String, String> newMap = new HashMap <String, String> (); как получить строковый элемент из этого ...? где String value = newMap.get ("my_code"); выдает ошибку
saidesh kilaru
11

Если вы будете использовать Generics и определите свою карту как

Map<String,String> map = new HashMap<String,String>();

затем получение значения как

 String s = map.get("keyStr"); 

вам не потребуется приводить тип map.get () или вызывать метод toString для получения значения String

Ширишкумар Бари
источник
9

Боюсь, ваш вопрос не совсем ясен. У ключа нет «имени»; что касается карты, он ничего не "называет" - это просто ключ, который будет сравниваться с другими ключами. Если у вас много разных типов ключей, я настоятельно рекомендую вам поместить их на разные карты в целях здравомыслия.

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

Джон Скит
источник
6

Здесь следует отметить важный момент: если ваш ключ является объектом определяемого пользователем класса в java, то сделайте его точкой для переопределения метода equals. Поскольку метод HashMap.get (Object key) использует метод equals для сопоставления значения ключа. Если вы не переопределите метод equals, он попытается найти значение просто на основе ссылки ключа, а не фактического значения ключа, и в этом случае он всегда будет возвращать значение null.

Шриджа Мохан
источник
gr8 объяснение мам :)
eLemEnt
3

Предположим, вы объявили HashMap как: -

HashMap<Character,Integer> hs = new HashMap<>();

Тогда ключ в карте имеет тип символьных данных и значение типа int. Теперь, чтобы получить значение, соответствующее ключу, независимо от типа ключа, типа значения, синтаксиса: -

    char temp = 'a';
    if(hs.containsKey(temp)){
`       int val = hs.get(temp); //val is the value corresponding to key temp
    }

Итак, согласно вашему вопросу вы хотите получить строковое значение, соответствующее ключу. Для этого просто объявите HashMap как HashMap <"тип данных ключа", "тип данных значения" hs = new HashMap <> (); Использование этого сделает ваш код более чистым, а также вам не нужно преобразовывать результат hs.get ("my_code") в строку, поскольку по умолчанию он возвращает значение строки, если во время ввода значение было сохранено в виде строки.

Гаурав Сачдева
источник
1

Это еще один пример использования функций keySet (), get (), values ​​() и entrySet () для получения ключей и значений на карте:

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());
высокоэнергетический лазер
источник
0

Вы можете использовать метод get (Object key) из HashMap. Имейте в виду, что во многих случаях ваш ключевой класс должен переопределять метод equals, чтобы быть полезным классом для ключа карты.

Раффаэль
источник
0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

Значение, сопоставленное с ключом, 4равноDD

Джабар Шахид
источник