¿Cuál es la forma más fácil de convertir List
a a Set
en Java?
java
collections
OHHAI
fuente
fuente
Set
y cuáles se esténMap
utilizando;HashSet
se 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
Set
como: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,HashSet
entonces podemos usar la otra alternativa para obtener un conjunto (verificarset3
).fuente
Con Java 10, ahora puede usar
Set#copyOf
para convertir fácilmente unList<E>
a no modificableSet<E>
:Ejemplo:
Tenga en cuenta que esta es una operación desordenada, y los
null
elementos no están permitidos, ya que arrojará unNullPointerException
.Si desea que sea modificable, simplemente páselo al constructor una
Set
implementación.fuente
Una solución más resistente de Java 8 con
Optional.ofNullable
fuente
Si usa Eclipse Collections :
La
MutableSet
interfaz se extiendejava.util.Set
mientras que laMutableIntSet
interfaz no. También puede convertir cualquieraIterable
aSet
usar laSets
clase de fábrica.Hay más explicaciones de las fábricas mutables disponibles en Eclipse Collections aquí .
Si desea un
ImmutableSet
de aList
, puede usar laSets
fá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