tutorial interfaz grafica espaƱol ejemplos componentes java performance list set

interfaz - java jframe tutorial pdf



Convertir el conjunto a la lista sin crear una nueva lista (12)

la solución más simple

Quería una forma muy rápida de convertir mi conjunto en Lista y devolverlo, así que en una línea lo hice

return new ArrayList<Long>(mySetVariable);

Estoy usando este código para convertir un Set en una List :

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

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


Creo un método static simple:

public static <U> List<U> convertSetToList(Set<U> set) { return new ArrayList<U>(set); }

... o si desea establecer el tipo de Lista puede usar:

public static <U, L extends List<U>> List<U> convertSetToList(Set<U> set, Class<L> clazz) throws InstantiationException, IllegalAccessException { L list = clazz.newInstance(); list.addAll(set); return list; }


Encontré este trabajo bien y útil para crear una lista de un conjunto.

ArrayList < String > L1 = new ArrayList < String > (); L1.addAll(ActualMap.keySet()); for (String x: L1) { System.out.println(x.toString()); }


Java 8 ofrece la opción de utilizar secuencias y puede obtener una lista de Set<String> setString como:

List<String> stringList = setString.stream().collect(Collectors.toList());

Aunque la implementación interna a partir de ahora proporciona una instancia de ArrayList :

public static <T> Collector<T, ?, List<T>> toList() { return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add, (left, right) -> { left.addAll(right); return left; }, CH_ID); }

Pero JDK no lo garantiza. Como se mencionó here :

No hay garantías sobre el tipo, la mutabilidad, la serialización o la seguridad de subprocesos de la Lista devuelta; Si se requiere más control sobre la Lista devuelta, use toCollection (Proveedor).

En caso de que quiera estar siempre seguro, puede solicitar una instancia específicamente como:

List<String> stringArrayList = setString.stream() .collect(Collectors.toCollection(ArrayList::new));


Podemos usar el siguiente liner en Java 8:

List<String> list = set.stream().collect(Collectors.toList());

Aquí hay un pequeño ejemplo:

public static void main(String[] args) { Set<String> set = new TreeSet<>(); set.add("A"); set.add("B"); set.add("C"); List<String> list = set.stream().collect(Collectors.toList()); }


Podría usar este cambio de una línea: Arrays.asList(set.toArray(new Object[set.size()]))

Map<String, List> mainMap = new HashMap<String, List>(); for(int i=0; i<something.size(); i++){ Set set = getSet(...); mainMap.put(differentKeyName, Arrays.asList(set.toArray(new Object[set.size()]))); }


Puedes usar el método List.addAll() . Acepta una Colección como un argumento, y su conjunto es una Colección.

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

EDITAR: como responder a la edición de la pregunta.
Es fácil ver que si desea tener un Map con la List s como valores, para tener k valores diferentes, necesita crear k listas diferentes.
Por lo tanto: no puede evitar crear estas listas en absoluto, las listas deberán crearse.

Posible trabajo alrededor de:
Declare su Map como un Map<String,Set> o Map<String,Collection> lugar, y simplemente inserte su conjunto.


Recientemente encontré esto:

ArrayList<T> yourList = Collections.list(Collections.enumeration(yourSet<T>));


También desde la biblioteca Guava Collect, puede 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 objeto de list .


Usa el constructor para convertirlo:

List<?> list = new ArrayList<?>(set);


Yo lo haría :

Map<String, Collection> mainMap = new HashMap<String, Collection>(); for(int i=0; i<something.size(); i++){ Set set = getSet(...); //return different result each time mainMap.put(differentKeyName,set); }


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