Frage Ist .asSet (...) in einer API vorhanden?


Ich suche nach einer sehr einfachen Möglichkeit, ein Set zu erstellen.

Arrays.asList("a", "b" ...) erstellt ein List<String>

Gibt es etwas Ähnliches für? Set ?


75
2018-05-03 12:20


Ursprung


Antworten:


Jetzt mit Java 8 können Sie dies ohne die Notwendigkeit von Drittanbieter-Framework tun:

Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());

Sehen Sammler.

Genießen!


32
2017-12-23 16:46



Verwenden GuaveSo einfach ist das:

Set<String> mySet = ImmutableSet.<String> of("a", "b");

Oder für eine veränderbare Menge:

Set<String> mySet = Sets.newHashSet("a", "b")

Weitere Datentypen finden Sie in der Guava Benutzerhandbuch


53
2018-05-03 12:24



Du könntest benutzen

new HashSet<String>(Arrays.asList("a","b"));

40
2018-05-03 12:21



Für die speziellen Fälle von Mengen mit null oder einem Mitglied können Sie verwenden:

java.util.Collections.EMPTY_SET

und:

java.util.Collections.singleton("A")

19
2018-01-15 16:20



Wie andere gesagt haben, verwenden Sie:

new HashSet<String>(Arrays.asList("a","b"));

Der Grund dafür ist nicht existieren in Java ist das Arrays.asList gibt eine feste Liste zurück, mit anderen Worten:

public static void main(String a[])
{
  List<String> myList = Arrays.asList("a", "b");
  myList.add("c");
}

Kehrt zurück:

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 "fixed-size" Set innerhalb der Arrays Klasse. Warum willst du das? EIN 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 sich Collection und Iterable.


Wie andere gesagt haben, benutze Guave Wenn Sie diese Funktionalität wirklich wollen - da sie nicht im JDK enthalten ist. Sehen Sie sich ihre Antworten an (insbesondere Michael Schmeißers Antwort), um Informationen dazu zu erhalten.


14
2018-05-03 12:28



Nein, aber du kannst es so machen

new HashSet<String>(Arrays.asList("a", "b", ...));

2
2018-05-03 12:22



Im Guave Du könntest benutzen

Set<String> set = Sets.newHashSet("a","b","c");

neuesHashSet


2
2018-05-03 12:27