Was ist der einfachste Weg, um List
a Set
in Java zu konvertieren ?
java
collections
OHHAI
quelle
quelle
Set
und welcheMap
verwendet werden.HashSet
wird hier angenommen .Ich stimme sepp2k zu, aber es gibt noch einige andere Details, die wichtig sein könnten:
Sie erhalten ein unsortiertes Set ohne Duplikate. In diesem Fall wird die Duplizierung mit der Methode .equals () für Ihre Objekte identifiziert. Dies erfolgt in Kombination mit der Methode .hashCode (). (Weitere Informationen zur Gleichstellung finden Sie hier )
Eine Alternative, die eine sortierte Menge ergibt, ist:
Dies funktioniert, wenn Foo Comparable implementiert. Wenn dies nicht der Fall ist, möchten Sie möglicherweise einen Komparator verwenden:
Dies hängt entweder von compareTo () (von der vergleichbaren Schnittstelle) oder compare () (vom Komparator) ab, um die Eindeutigkeit sicherzustellen. Wenn Sie sich also nur für die Einzigartigkeit interessieren, verwenden Sie das HashSet. Wenn Sie nach dem Sortieren sind, ziehen Sie das TreeSet in Betracht. (Denken Sie daran: Später optimieren!) Wenn Zeiteffizienz wichtig ist, verwenden Sie ein HashSet, wenn Raumeffizienz wichtig ist, schauen Sie sich TreeSet an. Beachten Sie, dass effizientere Implementierungen von Set und Map über Trove (und andere Standorte) verfügbar sind.
quelle
Wenn Sie die Guava- Bibliothek verwenden:
oder besser:
quelle
ImmutableSet.of()
zum Beispiel bei ist. BEARBEITEN: Dies ist möglicherweise kein Faktor, da alle Überlastungen nicht benötigt werden.Mit Java 8 können Sie Stream verwenden:
quelle
oder vollständiges Beispiel
quelle
Ich würde eine Nullprüfung durchführen, bevor ich zu set konvertiere.
quelle
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
Sie können konvertieren
List<>
zuSet<>
quelle
Für Java 8 ist es sehr einfach:
quelle
new ArrayList<>()
;-)Java - addAll
Java - neues Objekt
Java-8
Mit Guva
Apache Commons
Java 10
quelle
Vergessen wir nicht unseren relativ neuen Freund, Java-8Stream-API. Wenn Sie eine Liste vorverarbeiten müssen, bevor Sie sie in einen Satz konvertieren, ist es besser, Folgendes zu haben:
quelle
Der beste Weg, um Konstruktor zu verwenden
In Java 8 können Sie auch stream api :: verwenden
quelle
Es gibt verschiedene Möglichkeiten, ein As zu erhalten
Set
:Wenn wir es verwenden
Collectors.toSet()
, wird ein Satz zurückgegeben und gemäß dem Dokument :There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
. Wenn wir ein bekommen wollen,HashSet
können wir die andere Alternative verwenden, um ein Set zu bekommen (checkset3
).quelle
Mit Java 10 können Sie jetzt
Set#copyOf
einfach aList<E>
in ein nicht modifizierbares konvertierenSet<E>
:Beispiel:
Beachten Sie, dass dies eine ungeordnete Operation ist und
null
Elemente nicht zulässig sind, da sie a auslösenNullPointerException
.Wenn Sie möchten, dass es geändert werden kann, übergeben Sie einfach eine
Set
Implementierung an den Konstruktor .quelle
Eine stabilere Java 8-Lösung mit
Optional.ofNullable
quelle
Wenn Sie Eclipse-Sammlungen verwenden :
Die
MutableSet
Schnittstelle wird erweitert,java.util.Set
dieMutableIntSet
Schnittstelle jedoch nicht. Sie können auch alle mithilfe der Factory-KlasseIterable
in a konvertieren .Set
Sets
Weitere Erläuterungen zu den veränderlichen Fabriken in Eclipse Collections finden Sie hier .
Wenn Sie eine
ImmutableSet
von a möchtenList
, können Sie dieSets
Fabrik wie folgt verwenden:Hinweis: Ich bin ein Committer für Eclipse-Sammlungen
quelle
Denken Sie daran, dass beim Konvertieren von List zu Set Duplikate aus der Sammlung entfernt werden, da List Duplikate unterstützt, Set jedoch keine Duplikate in Java unterstützt.
Direkte Konvertierung: Die häufigste und einfachste Methode zum Konvertieren einer Liste in einen Satz
Apache Commons Collections: Sie können auch die Commons Collections-API verwenden, um eine Liste in einen Satz zu konvertieren: -
Verwenden von Stream: Eine andere Möglichkeit besteht darin, eine bestimmte Liste in einen Stream zu konvertieren und dann in einen Set zu streamen: -
quelle