Pergunta

Eu estou acostumado a trabalhar com PHP, mas ultimamente tenho vindo a trabalhar com Java e estou tendo uma dor de cabeça tentando descobrir isso. Eu quero salvar esta representação em 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"] 
                          )
)

Existe uma maneira limpa (ou seja, nenhum código sujo) para salvar esta coisa em Java? Nota; Eu gostaria de usar cordas como índices de array (na primeira dimensão) e eu não sei o tamanho definitivo das matrizes ..

Foi útil?

Solução

Você pode usar um mapa e uma lista (essas interfaces ambos são implementados em mais de uma maneira para que você possa escolher o mais adequado no seu caso).

Para mais informações confira os tutoriais para Mapa e Lista e talvez você deve começar com o Collections tutorial.

Um exemplo:

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");

    }
}

Outras dicas

Tente usar um Map<String, List<String>>. Isso permitirá que você use seqüências como chaves / índices para o mapa exterior e obter um resultado que é uma lista de strings como valores. Você provavelmente vai querer usar um HashMap para ver o mapa exterior e ArrayList de para as listas internas.

Se você quiser algum código limpo que é semelhante ao PHP que você deu para inicializar-lo, você pode fazer algo como isto:

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"));
}};

Você quer um Map , que são introduzidos por qualquer coisa. HashMap s trabalho na maioria dos casos .

Algo como isso.

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);

Se você quiser algo mais simples, o commons-lang biblioteca tem um MultiMap .

Esteja avisado que o Vector é código legado para o quadro Collections. Ele sincroniza o acesso aos seus elementos que diminui o desempenho. A maioria dos casos de uso para usar lista não precisa deste tipo de segurança do thread, e mesmo se você fez, eu estaria mais inclinado a usar o CopyOnWriteArrayList .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top