Convertir conjunto en lista sin crear una nueva lista
Estoy usando este código para convertir a Set
en 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?
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 Map
con List
s 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 Map
como Map<String,Set>
o Map<String,Collection>
en su lugar y simplemente inserta tu conjunto.
Utilice el constructor para convertirlo:
List<?> list = new ArrayList<>(set);
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 list
objeto.