Convertir conjunto en lista sin crear una nueva lista

Resuelto Muhammad Imran Tariq asked hace 12 años • 15 respuestas

Estoy usando este código para convertir a Seten a List:

Map<String, List<String>> mainMap = new HashMap<>();

for (int i=0; i < something.size(); i++) {
  Set<String> set = getSet(...); //returns different result each time
  List<String> listOfNames = new ArrayList<>(set);
  mainMap.put(differentKeyName, listOfNames);
}

Quiero evitar crear una nueva lista en cada iteración del bucle. ¿Es eso posible?

Muhammad Imran Tariq avatar Jan 17 '12 16:01 Muhammad Imran Tariq
Aceptado

Puede utilizar el método List.addAll() . Acepta una Colección como argumento y su conjunto es una Colección.

List<String> mainList = new ArrayList<String>();
mainList.addAll(set);

EDITAR: como respuesta a la edición de la pregunta.
Es fácil ver que si desea tener a Mapcon Lists como valores, para tener k valores diferentes, necesita crear k listas diferentes.
Por lo tanto: No puedes evitar la creación de estas listas en absoluto, las listas deberán crearse.

Posible solución alternativa:
declara tu Mapcomo Map<String,Set>o Map<String,Collection>en su lugar y simplemente inserta tu conjunto.

amit avatar Jan 17 '2012 09:01 amit

Utilice el constructor para convertirlo:

List<?> list = new ArrayList<>(set);
zengsn avatar Sep 29 '2013 11:09 zengsn

También desde la biblioteca Guava Collect, puedes usar newArrayList(Collection):

Lists.newArrayList([your_set])

Esto sería muy similar a la respuesta anterior de amit , excepto que no es necesario declarar (o instanciar) ningún listobjeto.

chaiyachaiya avatar Jul 11 '2013 08:07 chaiyachaiya