simetrica programa manejo lista interseccion hacer diferencia convertir conjuntos como arreglos java collections

java - programa - list to set python



La forma más fácil de convertir una lista a un conjunto en Java (13)

Con Java 10, ahora podría usar Set#copyOf para convertir fácilmente una List<E> en un Set<E> no modificable Set<E> :

Ejemplo:

var set = Set.copyOf(list);

Tenga en cuenta que se trata de una operación desordenada y que no se permiten elementos null , ya que generará una NullPointerException .

Si desea que sea modificable, simplemente pásele al constructor una implementación de Set .

¿Cuál es la forma más fácil de convertir una List en un Set en Java?


Estoy de acuerdo con sepp2k, pero hay algunos otros detalles que pueden importar:

new HashSet<Foo>(myList);

le dará un conjunto sin clasificar que no tiene duplicados. En este caso, la duplicación se identifica mediante el método .equals () en sus objetos. Esto se hace en combinación con el método .hashCode (). (Para más información sobre igualdad mira here )

Una alternativa que da un conjunto ordenado es:

new TreeSet<Foo>(myList);

Esto funciona si Foo implementa Comparable. Si no es así, es posible que desee utilizar un comparador:

Set<Foo> lSet = new TreeSet<Foo>(someComparator); lSet.addAll(myList);

Esto depende de compareTo () (de la interfaz comparable) o compare () (del comparador) para asegurar la singularidad. Entonces, si solo te importa la singularidad, usa el HashSet. Si está después de la clasificación, considere el TreeSet. (Recuerde: ¡Optimice más adelante!) Si la eficiencia del tiempo es importante, use un HashSet si la eficiencia del espacio es importante, consulte TreeSet. Tenga en cuenta que las implementaciones más eficientes de Set y Map están disponibles a través de Trove (y otras ubicaciones).


Hay varias formas de obtener un Set como:

List<Integer> sourceList = new ArrayList(); sourceList.add(1); sourceList.add(2); sourceList.add(3); sourceList.add(4); // Using Core Java Set<Integer> set1 = new HashSet<>(sourceList); //needs null-check if sourceList can be null. // Java 8 Set<Integer> set2 = sourceList.stream().collect(Collectors.toSet()); Set<Integer> set3 = sourceList.stream().collect(Collectors.toCollection(HashSet::new)); //Guava Set<Integer> set4 = Sets.newHashSet(sourceList); // Apache commons Set<Integer> set5 = new HashSet<>(4); CollectionUtils.addAll(set5, sourceList);

Cuando usamos Collectors.toSet() , devuelve un conjunto y según el documento: There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned . Si queremos obtener un HashSet , podemos usar la otra alternativa para obtener un conjunto (ver conjunto 3).


La mejor manera de usar constructor.

Set s= new HashSet(list);

En java 8 también puedes usar stream api ::

Set s= list.stream().collect(Collectors.toSet());


No olvidemos a nuestro amigo relativamente nuevo, java-8 stream API. Si necesita preprocesar la lista antes de convertirla en un conjunto, es mejor tener algo como:

list.stream().<here goes some preprocessing>.collect(Collectors.toSet());


Para Java 8 es muy fácil:

List < UserEntity > vList= new ArrayList<>(); vList= service(...); Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());


Puede convertir List<> a Set<>

Set<T> set=new HashSet<T>(); //Added dependency -> If list is null then it will throw NullPointerExcetion. Set<T> set; if(list != null){ set = new HashSet<T>(list); }


Si utiliza la biblioteca de Guava :

Set<Foo> set = Sets.newHashSet(list);

o mejor:

Set<Foo> set = ImmutableSet.copyOf(list);


Una solución más resistente de Java 8 con Optional.ofNullable

Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);


Usando java 8 puedes usar stream:

List<Integer> mylist = Arrays.asList(100, 101, 102); Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));


Yo haría una verificación nula antes de convertir a establecer.

if(myList != null){ Set<Foo> foo = new HashSet<Foo>(myList); }


Set<E> alphaSet = new HashSet<E>(<your List>);

o ejemplo completo

import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ListToSet { public static void main(String[] args) { List<String> alphaList = new ArrayList<String>(); alphaList.add("A"); alphaList.add("B"); alphaList.add("C"); alphaList.add("A"); alphaList.add("B"); System.out.println("List values ....."); for (String alpha : alphaList) { System.out.println(alpha); } Set<String> alphaSet = new HashSet<String>(alphaList); System.out.println("/nSet values ....."); for (String alpha : alphaSet) { System.out.println(alpha); } } }


Set<Foo> foo = new HashSet<Foo>(myList);