La forma más sencilla de convertir una lista en un conjunto en Java

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

 Set foo = new HashSet(myList); 

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

 new HashSet(myList); 

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

Una alternativa que ofrece un conjunto ordenado es:

 new TreeSet(myList); 

Esto funciona si Foo implementa Comparable. Si no es así, puede usar un comparador:

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

Esto depende de compareTo () (de la interfaz comparable) o compare () (del comparador) para garantizar la exclusividad. Entonces, si solo te preocupa la singularidad, utiliza el HashSet. Si buscas una clasificación, considera el TreeSet. (Recuerde: ¡Optimice más tarde!) Si la eficiencia del tiempo es importante, utilice un HashSet si la eficiencia del espacio importa, 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).

Si usa la biblioteca de Guava :

 Set set = Sets.newHashSet(list); 

o mejor:

 Set set = ImmutableSet.copyOf(list); 

Usando java 8 puedes usar stream:

 List mylist = Arrays.asList(100, 101, 102); Set myset = mylist.stream().collect(Collectors.toSet())); 
 Set alphaSet = new HashSet(); 

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 alphaList = new ArrayList(); 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 alphaSet = new HashSet(alphaList); System.out.println("\nSet values ....."); for (String alpha : alphaSet) { System.out.println(alpha); } } } 

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

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

Puede convertir List<> a Set<>

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

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

 list.stream()..collect(Collectors.toSet()); 

Para Java 8 es muy fácil:

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

Hay varias formas de obtener un Set como:

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

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

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

Con Java 10, ahora puede usar Set#copyOf para convertir fácilmente una List a un Set no modificable:

Ejemplo:

 var set = Set.copyOf(list); 

Tenga en cuenta que esta es una operación desordenada, y null elementos null no están permitidos, ya que arrojará una NullPointerException .

Si desea que sea modificable, simplemente páselo al constructor a Set implementación.