¿Cuál es la forma más fácil de convertir Lista a Seten Java?
java
collections
OHHAI
fuente
fuente

Sety cuáles se esténMaputilizando;HashSetse asume aquí.Estoy de acuerdo con sepp2k, pero hay otros detalles que pueden ser importantes:
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 realiza en combinación con el método .hashCode (). (Para más información sobre igualdad, mira aquí )
Una alternativa que da un conjunto ordenado es:
Esto funciona si Foo implementa Comparable. Si no es así, es posible que desee utilizar un comparador:
Esto depende de compareTo () (desde la interfaz comparable) o compare () (desde el comparador) para garantizar la unicidad. Entonces, si solo te importa la singularidad, usa el HashSet. Si buscas ordenar, considera el TreeSet. (Recuerde: ¡Optimice más tarde!) Si la eficiencia del tiempo es importante, use un HashSet si la eficiencia del espacio es importante, mire 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).
fuente
Si usa la biblioteca Guava :
o mejor:
fuente
ImmutableSet.of(), por ejemplo. EDITAR: puede no ser factor porque todas las sobrecargas son innecesarias.Usando java 8 puedes usar stream:
fuente
o ejemplo completo
fuente
Realizaría una comprobación nula antes de convertir a set.
fuente
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);Puedes convertir
List<>aSet<>fuente
Para Java 8 es muy fácil:
fuente
new ArrayList<>();-)Java - addAll
Java - nuevo objeto
Java-8
Usando Guva
Apache Commons
Java 10
fuente
No olvidemos a nuestro amigo relativamente nuevo, java-8Stream API. Si necesita preprocesar la lista antes de convertirla en un conjunto, es mejor tener algo como:
fuente
La mejor manera de usar constructor
En java 8 también puedes usar stream api ::
fuente
Hay varias formas de obtener un
Setcomo:Cuando usamos
Collectors.toSet()devuelve un conjunto y según el doc:There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned. Si queremos obtener un,HashSetentonces podemos usar la otra alternativa para obtener un conjunto (verificarset3).fuente
Con Java 10, ahora puede usar
Set#copyOfpara convertir fácilmente unList<E>a no modificableSet<E>:Ejemplo:
Tenga en cuenta que esta es una operación desordenada, y los
nullelementos no están permitidos, ya que arrojará unNullPointerException.Si desea que sea modificable, simplemente páselo al constructor una
Setimplementación.fuente
Una solución más resistente de Java 8 con
Optional.ofNullablefuente
Si usa Eclipse Collections :
La
MutableSetinterfaz se extiendejava.util.Setmientras que laMutableIntSetinterfaz no. También puede convertir cualquieraIterableaSetusar laSetsclase de fábrica.Hay más explicaciones de las fábricas mutables disponibles en Eclipse Collections aquí .
Si desea un
ImmutableSetde aList, puede usar laSetsfábrica de la siguiente manera:Nota: Soy un committer para Eclipse Collections
fuente
Recuerde que, la conversión de List a Set eliminará los duplicados de la colección porque List admite duplicados pero Set no admite duplicados en Java.
Conversión directa: la forma más común y sencilla de convertir una lista en un conjunto
Apache Commons Collections: también puede usar la API de Commons Collections para convertir una lista en un conjunto: -
Uso de Stream: Otra forma es convertir la lista dada a stream, luego stream para establecer: -
fuente