Crear mapa en Java

84

Me gustaría crear un mapque contenga entradas que constan de(int, Point2D)

¿Cómo puedo hacer esto en Java?

Intenté lo siguiente sin éxito.

HashMap hm = new HashMap();

hm.put(1, new Point2D.Double(50, 50));
Kevin Meredith
fuente
su hm.put se parece más a unMap<Integer, Double>
Luiggi Mendoza
1
¿Qué quieres decir con no tener éxito?
texasbruce

Respuestas:

115
Map <Integer, Point2D.Double> hm = new HashMap<Integer, Point2D>();
hm.put(1, new Point2D.Double(50, 50));
hd1
fuente
8
También debe hacer import java.util.Map; import java.util.HashMap;oimport java.util.*;
Máximo
19

Existe incluso una forma mejor de crear un mapa junto con la inicialización:

Map<String, String> rightHereMap = new HashMap<String, String>()
{
    {
        put("key1", "value1");
        put("key2", "value2");
    }
};

Para ver más opciones, eche un vistazo aquí. ¿Cómo puedo inicializar un mapa estático?

webdizz
fuente
4
Esta es una forma realmente mala de inicializar un mapa.
Kao
1
@Kao ¿Por qué? Esto solo contiene visualmente la operación; de lo contrario, es idéntica a la respuesta principal de esta pregunta.
Anthony Mansour
5
No, no es. Es una inicialización de doble llave, que es, en términos generales, un anti-patrón. He aquí por qué .
Kao
18

Java 9

public static void main(String[] args) {
    Map<Integer,String> map = Map.ofEntries(entry(1,"A"), entry(2,"B"), entry(3,"C"));
}
Durgpal Singh
fuente
8
Map.of(1, "A", 2, "B", 3, "C")es mejor
ZhekaKozlov
mira esto. stackoverflow.com/questions/46601959/…
Durgpal Singh
@ZhekaKozlov Traté de usar Map.of, cuando ejecuto la prueba dice que no pude encontrar el símbolojava: cannot find symbol symbol: method of(java.lang.String,double) location: interface java.util.Map
soMuchToLearn
@soMuchToLearn ¿Qué versión de Java usas? Correrjava -version
ZhekaKozlov
java 11, @ZhekaKozlovopenjdk 11.0.8 2020-07-14 OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04) OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
soMuchToLearn
9
Map<Integer, Point2D> hm = new HashMap<Integer, Point2D>();
Achrome
fuente
Point2D.Doubleno parece un Point2D= \
Luiggi Mendoza
usando Map<int, Point2D> hm = new HashMap<int, Point2D>(), obtengo este error: Error de sintaxis en el token "int", Dimensiones esperadas después de este token.
Kevin Meredith
Olvidé que los mapas de Java no admiten tipos primitivos. Arreglado eso.
Achrome
pero necesito Point2D como valor en [clave, valor]. : /
Kevin Meredith
Eso fue lo que escribí inicialmente.
Achrome
1

Utilizo este tipo de población de mapas gracias a Java 9. En mi sincera opinión, este enfoque proporciona más legibilidad al código.

  public static void main(String[] args) {
    Map<Integer, Point2D.Double> map = Map.of(
        1, new Point2D.Double(1, 1),
        2, new Point2D.Double(2, 2),
        3, new Point2D.Double(3, 3),
        4, new Point2D.Double(4, 4));
    map.entrySet().forEach(System.out::println);
  }
Julian Kolodzey
fuente