Ich suche nach einer sehr einfachen Möglichkeit, ein Set zu erstellen.Ist .asSet (...) in einer beliebigen API vorhanden?
Arrays.asList("a", "b" ...)
schafft ein List<String>
Gibt es etwas ähnliches für Set
?
Ich suche nach einer sehr einfachen Möglichkeit, ein Set zu erstellen.Ist .asSet (...) in einer beliebigen API vorhanden?
Arrays.asList("a", "b" ...)
schafft ein List<String>
Gibt es etwas ähnliches für Set
?
Jetzt mit Java 8 Sie dies ohne die Notwendigkeit von Drittanbietern tun Rahmen:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
Siehe Collectors.
Viel Spaß!
Heutzutage mit Java 8 ist dies wahrscheinlich die beste Antwort, weil es nicht von 3rd-Party-Bibliotheken abhängt und leicht an andere Sammlung angepasst werden kann Typen, also setze ich dies als akzeptiert ein. Vielen Dank an alle für die anderen großartigen Lösungen. (Übrigens, dieses Set ist änderbar) – cahen
Nun, wer hat gesagt, dass Java zu ausführlich war? Das ist natürlich die beste Antwort! – BobDoolittle
Vielen Dank @BobDoolittle! –
Sie
new HashSet<String>(Arrays.asList("a","b"));
Nein verwenden könnte, aber Sie können es tun, wie diese
new HashSet<String>(Arrays.asList("a", "b", ...));
Mit Guava ist es so einfach wie das:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
Oder für eine veränderbare Satz:
Set<String> mySet = Sets.newHashSet("a", "b")
Weitere Datentypen finden Sie in der Guava user guide
Gibt es eine nicht unveränderliche Version davon? – cahen
@cohen ja: 'Sets.newHashSet (" a "," b ")' oder 'Sets.newLinkedHashSet (" a "," b ")' –
Ich habe der Antwort eine änderbare Variante hinzugefügt. –
Wie andere gesagt haben, nutzen könnten, zu verwenden:
new HashSet<String>(Arrays.asList("a","b"));
Der Grund dies tut nicht existieren in Java ist, dass Arrays.asList
kehrt eine feste Größe Liste, mit anderen Worten:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
Returns:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Es gibt keine JDK Implementierung einer "festen Größe" Set
innerhalb der Arrays
Klasse . Warum willst du das? A Set
garantiert, dass es keine Duplikate gibt, aber wenn Sie sie manuell eingeben, sollten Sie diese Funktionalität nicht benötigen ... und List
hat mehr Methoden. Beide Schnittstellen erweitern Collection
und Iterable
.
Wie schon andere gesagt haben, verwenden guava Wenn Sie wirklich diese Funktionalität wollen - da es nicht in der JDK ist. Sehen Sie sich ihre Antworten an (insbesondere Michael Schmeißers Antwort), um Informationen dazu zu erhalten.
gehört. Dies ist die beste Antwort bisher, weil es darauf hinweist, was Arrays.asList() tatsächlich tut. Viele Entwickler scheinen zu glauben, dass Arrays.asList() eine java.util.ArrayList erstellt, während sie tatsächlich eine java.util.Arrays $ ArrayList erstellt (die nur teilweise veränderbar ist und eine Live-Ansicht des zugrunde liegenden Arrays). –
Warum? jemand möchte dies tun, der häufigste Grund, ein Set (oder eine Liste) von Hand zu konstruieren, ist in einer Testklasse, in der Sie Testwerte übergeben. –
Für die besondere Fälle von Sätzen mit null oder eins Mitgliedern, können Sie verwenden:
java.util.Collections.EMPTY_SET
und:
java.util.Collections.singleton("A")
für diese speziellen Fälle, ist es wahrscheinlich die beste Lösung, da es den Standard java.util API verwendet – arcuri82
Hier ist eine kleine Methode Sie
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
In Java 9 ähnliche Funktion über Factory-Methoden hinzugefügt wurde verwenden können:
Set<String> oneLinerSet = Set.of("a", "b", ...);
(Es gibt Mittel für List
als auch.)
möglich Duplikat von [Java - leicht zu konvertieren Array zu setzen] (http://stackoverflow.com/questions/3064423/java-easily-convert-array-to-set) –
ist es nicht, creatin g a Setzen und Konvertieren eines Arrays in ein Set ist nicht das Gleiche – cahen