Pregunta

Estoy acostumbrado a trabajar con PHP, pero últimamente he estado trabajando con Java y me duele la cabeza intentando resolver esto. Quiero guardar esta representación en Java:

Array ( 
        ["col_name_1"] => Array ( 
                               1 => ["col_value_1"], 
                               2 => ["col_value_2"], 
                               ... , 
                               n => ["col_value_n"] 
                          ),
        ["col_name_n"] => Array ( 
                               1 => ["col_value_1"], 
                               2 => ["col_value_2"], 
                               ... , 
                               n => ["col_value_n"] 
                          )
)

¿Hay una forma limpia (es decir, sin código sucio) para guardar esta cosa en Java? Nota; Me gustaría usar cadenas como índices de matriz (en la primera dimensión) y no sé el tamaño definido de las matrices.

¿Fue útil?

Solución

Puede usar un Mapa y una Lista (ambas son interfaces implementadas de más de una manera para que elija la más adecuada en su caso).

Para obtener más información, consulte los tutoriales de Mapa y List y tal vez debería comenzar con Tutorial de colecciones .

Un ejemplo:

import java.util.*;

public class Foo {
    public static void main(String[] args) {
        Map<String, List<String>> m = new HashMap<String, List<String>>();
        List<String> l = new LinkedList<String>();
        l.add("col_value_1");
        l.add("col_value_2");
        //and so on
        m.put("col_name_1",l); //repeat for the rest of the colnames

       //then, to get it you do

       List<String> rl = m.get("col_name_1");

    }
}

Otros consejos

Intente utilizar un Mapa < Cadena, Lista < String > > . Esto le permitirá usar Cadenas como claves / índices en el mapa externo y obtener un resultado que será una lista de Cadenas como valores. Probablemente querrá usar un HashMap para el mapa externo y ArrayList para las listas internas.

Si desea algún código limpio que sea similar al PHP que dio para inicializarlo, puede hacer algo como esto:

Map<String, List<String>> columns = new HashMap<String, List<String>>() {{
    put("col_name_1", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
    put("col_name_2", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
    put("col_name_n", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
}};

Desea un Mapa , que están codificados por casi cualquier cosa. HashMap en la mayoría de los casos .

Algo como esto.

List<String> col1Vals = new java.util.ArrayList<String>();
col1Vals.add("col_value_1");
col1Vals.add("col_value_2");
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("col_name_1", col1Vals);

Si desea algo más simple, la biblioteca commons-lang tiene una MultiMap .

Tenga en cuenta que el Vector es un código heredado para el marco de Colecciones. Sincroniza el acceso a sus elementos, lo que ralentiza el rendimiento. La mayoría de los casos de uso para usar List no necesitan este tipo de seguridad de subprocesos, e incluso si lo hiciera, estaría más inclinado a usar CopyOnWriteArrayList .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top