obtener el valor de cadena de HashMap según el nombre de la clave

123

Tengo un HashMapcon varias claves y valores, ¿cómo puedo obtener un valor?

Tengo una clave en el mapa llamada my_code, debe contener una cadena, ¿cómo puedo obtenerla sin tener que recorrer el mapa?

Hasta ahora tengo ..

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

Espero ver un String, como "ABC" o "DEF", ya que eso es lo que puse allí inicialmente, pero si lo hago System.out.println(), obtengo algo comojava.lang.string#F0454

Lo siento, no estoy muy familiarizado con los mapas como probablemente puedas adivinar;)

Palanqueta
fuente

Respuestas:

166

Solo uso Map#get(key)?

Object value = map.get(myCode);

Aquí hay un tutorial sobre mapas, puede resultarle útil: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Editar: editó su pregunta con lo siguiente:

Espero ver una cadena, como "ABC" o "DEF", ya que eso es lo que puse allí inicialmente, pero si hago un System.out.println () obtengo algo como java.lang.string # F0454

Lo siento, no estoy muy familiarizado con los mapas como probablemente puedas adivinar;)

Estás viendo el resultado de Object#toString(). Pero el java.lang.Stringque ya debería haber implementado, a menos que creó un encargo de aplicación con una minúscula sen el nombre: java.lang.string. Si en realidad es un objeto personalizado, entonces usted necesita para anulación Object#toString()de obtener una "cadena legible por humanos" cada vez que haces una System.out.println()o toString()sobre el objeto deseado. Por ejemplo:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
BalusC
fuente
1
Por supuesto, si está creando una clase de cadena personalizada, recomendaría (1) no hacerlo, ya que probablemente no sea lo que desea hacer, y (2) si va a hacer eso, NO lo ponga en el espacio de nombres java.lang.
MatrixFrog
1
if HashMap <String, String> newMap = new HashMap <String, String> (); ¿Cómo obtener el elemento de cadena de esto ...? donde valor de cadena = newMap.get ("my_code"); da error
saidesh kilaru
¿Cómo puedes invertir? obtener clave del valor?
entrega
58

Si está almacenando claves / valores como cadenas, esto funcionará:

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

La pregunta es qué se llena en el HashMap (clave y valor)

Jeff Porter
fuente
if HashMap <String, String> newMap = new HashMap <String, String> (); ¿Cómo obtener el elemento de cadena de esto ...? donde valor de cadena = newMap.get ("my_code"); da error
saidesh kilaru
11

Si usará Generics y definirá su mapa como

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

luego obtener valor como

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

no se le pedirá que escriba el map.get () o llame al método toString para obtener el valor de String

Shirishkumar Bari
fuente
9

Su pregunta no está del todo clara, me temo. Una clave no tiene un "nombre"; no se "llama" nada en lo que respecta al mapa, es solo una clave y se comparará con otras claves. Si tiene muchos tipos diferentes de claves, le sugiero encarecidamente que las coloque en diferentes mapas en aras de la cordura.

Si esto no ayuda, por favor aclare la pregunta, preferiblemente con algún código para mostrar lo que quiere decir.

Jon Skeet
fuente
7

map.get(myCode)

abyx
fuente
6

Un punto importante a tener en cuenta aquí es que si su clave es un objeto de la clase definida por el usuario en Java, haga que sea un punto para anular el método de igualdad. Debido a que el método HashMap.get (clave de objeto) utiliza el método igual para hacer coincidir el valor de la clave. Si no anula el método igual, intentará encontrar el valor simplemente en función de la referencia de la clave y no del valor real de la clave, en cuyo caso siempre devolverá un valor nulo.

Sreeja Mohan
fuente
explicación de gr8 mam :)
eLemEnt
3

Supongamos que declaraste HashMap como: -

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

Luego, la clave en el mapa es de tipo Tipo de datos de caracteres y valor de tipo int. Ahora, para obtener el valor correspondiente a la clave independientemente del tipo de clave, tipo de valor, la sintaxis es: -

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

Entonces, de acuerdo con su pregunta, desea obtener el valor de cadena correspondiente a una clave. Para esto, simplemente declare HashMap como HashMap <"tipo de datos de clave", "tipo de datos de valor" hs = new HashMap <> (); El uso de esto hará que su código sea más limpio y tampoco tendrá que convertir el resultado de hs.get ("my_code") en una cadena, ya que de forma predeterminada devuelve el valor de la cadena si en el momento de la entrada se ha mantenido el valor como una cadena.

Gaurav Sachdeva
fuente
1

Este es otro ejemplo de cómo usar las funciones keySet (), get (), values ​​() y entrySet () para obtener claves y valores en un mapa:

        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());
hola
fuente
0

Puede usar el método get (clave de objeto) de HashMap. Tenga en cuenta que en muchos casos su clase de clave debería anular el método de igualdad, para ser una clase útil para una clave de mapa.

raffael
fuente
0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

El valor asignado a la clave 4esDD

Jabar Shahid
fuente