rodpuc
Fevereiro 17, 2009, 2:06pm
#1
Eu preciso criar um Map que tem uma chave e DOIS elementos, oq “ficaria” assim:
private Map<Etapa, List<String>, List<String>> a;
mas, como todos sabem, o map aceita apenas UMA chave e UM elemento. Qual seria a solução mais elegante para este problema?
Que tal um array de dois elementos?
rodpuc
Fevereiro 17, 2009, 2:15pm
#3
n me parece mto elegante…
Tchello
Fevereiro 17, 2009, 2:17pm
#4
Quital um objeto com esses dois elementos? =P
Depende do escopo.
Geralmente, a solução mais elegante é criar uma classe Listas que encapsula as duas listas:
private Map<Etapa, Listas> a;
g4j
Fevereiro 17, 2009, 3:16pm
#6
Não sei bem qual a funcionalidade disso, mas uma idéia seria criar uma classe com os 2 parametros:
public class Valores {
private String valor1;
private String valor2;
}
e armazenar as instancias dessa classe em um map…
Lavieri
Fevereiro 17, 2009, 3:43pm
#7
se não existir relação entre as 2 listas, o melhor, na minha opinião, é criar um objeto com as dua listas
[code]public class ListaDupla {
private final List lista1;
private final List lista2;
public ListaDupla(List lista1, List lista2) {
this.lista1 = lista1;
this.lista2 = lista2;
}
public List getLista1() {
return lista1;
}
public List getLista2() {
return lista2;
}
}[/code]
ai vc faria o map assim
[code]private Map<Etapa, ListaDupla> a;
//podendo fazer
a.get(key).getLista1();
//ou
a.get(key).getLista2(); [/code]
alem disso pode criar outras funcionalidades em Lista Dupla, como contains etc etc etc
thingol
Fevereiro 17, 2009, 3:58pm
#8
Em muitos programas que escrevo (devido à influência de linguagens como o C++ e o Scala) eu costumo criar uma classe assim:
class Pair<T, U> {
public T first;
public U second;
public Pair (T first_, U second_) { first = first_; second = second_; }
}
e depois eu uso como se fosse essa classe do g4j. Por exemplo, seu problema original ficaria:
private Map<Etapa, Pair < List < String > , List < String > > a;
Se eu não me engano, o Commons Collections tem uma classe que cria um Map<Object, List<?>> e abstrai isso pra você. Ou seja, quando você adiciona um elemento em determinada chave, ele adiciona esse elemento em uma lista interna... o quê permite ter vários elementos por chave. Quando você dá um get(key), ele retorna um List<?> com os objetos que vc adicionou.
Você ficaria com algo como um Map<Object, List<List>>