Existiert .asSet(…) in irgendeiner API?

Lesezeit: 4 Minuten

Benutzer-Avatar
cahen

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

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

Gibt es etwas ähnliches für Set ?

  • mögliches Duplikat von Java – einfaches Konvertieren von Array in Set

    – Danilo Piazzalunga

    11. März 2014 um 13:22 Uhr

  • es ist nicht das Erstellen eines Sets und das Konvertieren eines Arrays in ein Set ist nicht dasselbe

    – cahen

    11. März 2014 um 16:34 Uhr

Mit Java 8 können Sie dies jetzt ohne Drittanbieter-Framework tun:

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

Sehen Sammler.

Genießen!

  • Nun, wer hat gesagt, dass Java zu ausführlich war? Das ist natürlich die beste Antwort!

    – BobDoolittle

    16. Oktober 2017 um 22:38 Uhr

  • Vielen Dank @BobDoolittle!

    – Herr Anderson

    17. Oktober 2017 um 13:48 Uhr

  • Für alle, die Java 9+ verwenden, lesen Sie bitte auch Hollys Antwort unten: stackoverflow.com/a/48025159/229743

    – Taylor

    10. Januar 2019 um 18:36 Uhr


  • Ich bevorzuge immer noch die Java 8 „Stream Way“-Funktion als die Java 9-Funktion, da „Collectors“ es Ihnen ermöglichen, die resultierende Sammlung anzupassen (kann „List“, „Set“ oder eine beliebige benutzerdefinierte Struktur sein), während die Dienstprogramme von java 9 muss für jeden Sammlungstyp separat aufgerufen werden (und nicht alle Strukturen haben ein entsprechendes “util” ).

    – Herr Anderson

    15. Januar 2019 um 14:08 Uhr


  • einwandfreie Antwort Mr. Anderson!

    – Gaurav

    25. Mai 2020 um 18:47 Uhr

Benutzer-Avatar
Michael Schmeißer

Verwenden Guaveso einfach ist das:

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

Oder für eine veränderliche Menge:

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

Weitere Datentypen finden Sie unter Guava-Benutzerhandbuch

  • Gibt es davon eine nicht unveränderliche Version?

    – cahen

    3. Mai 2013 um 12:25 Uhr

  • @cahen ja: Sets.newHashSet("a", "b") oder Sets.newLinkedHashSet("a", "b")

    – Sean Patrick Floyd

    3. Mai 2013 um 12:26 Uhr

  • Ich habe der Antwort eine veränderliche Variante hinzugefügt.

    – Michael Schmeißer

    3. Mai 2013 um 12:32 Uhr


  • eigentlich, Sets.newLinkedHashSet() existiert nicht mit dieser Signatur, sorry

    – Sean Patrick Floyd

    3. Mai 2013 um 12:33 Uhr

  • Ich konnte eines der Typargumente entfernen: Set<String> mySet = ImmutableSet.of("a", "b");

    – Joshden

    13. Juni 2016 um 21:03 Uhr

Du könntest benutzen

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

  • Ich würde dies lieber tun, als die Stream-Version zu verwenden. Ich kann “asList” einfach statisch importieren, wodurch dies noch weniger ausführlich wird.

    – Marcio Lucca

    18. August 2020 um 19:15 Uhr

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

java.util.Collections.EMPTY_SET

und:

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

In Java 9 wurde eine ähnliche Funktion über Factory-Methoden hinzugefügt:

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

(Es gibt Äquivalente für List auch.)

  • Ich habe dies versucht und eine Compiler-Warnung erhalten, dass dies keine API-Methode ist.

    – Philippe Gioseffi

    21. Juni 2018 um 15:57 Uhr

  • Hier ist das relevante Java-Dokument: docs.oracle.com/javase/9/docs/api/java/util/Set.html. Neben der Verwendung eines Java 9+ JDK müssen Sie möglicherweise Ihre IDE oder Ihr Build-Tool anpassen, um die Java 9-Konformität zu verwenden (z. B. für Maven wären es ähnliche Schritte wie hier, aber auf 1.9 gesetzt: stackoverflow.com/ Fragen/16798066/…)

    – Holly Cummins

    25. Juni 2018 um 9:30 Uhr

  • Wünschte, wir könnten Java 9 verwenden. Wir leben in der Vergangenheit! 🙁

    – WheelersWebservices

    26. Februar 2019 um 18:03 Uhr

  • das ist gut, aber es gibt einige Einschränkungen hinsichtlich der Größe der Argumente …

    – Radoslaw Iwanow

    22. Oktober 2019 um 0:37 Uhr

Wie andere gesagt haben, verwenden Sie:

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

Der Grund dafür nicht existieren in Java ist das Arrays.asList gibt eine Liste mit fester Größe 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 “festen Größe” Set innerhalb der Arrays Klasse. Warum willst du das? EIN Set garantiert, dass es keine Duplikate gibt, aber wenn Sie sie von Hand eingeben, sollten Sie diese Funktionalität nicht benötigen … und List hat mehr Methoden. Beide Schnittstellen verlängern Collection und Iterable.


Wie andere gesagt haben, verwenden Guave Wenn Sie diese Funktionalität wirklich möchten – da sie nicht im JDK enthalten ist. Sehen Sie sich ihre Antworten (insbesondere die Antwort von Michael Schmeißer) an, um Informationen dazu zu erhalten.

  • Ich habe dies versucht und eine Compiler-Warnung erhalten, dass dies keine API-Methode ist.

    – Philippe Gioseffi

    21. Juni 2018 um 15:57 Uhr

  • Hier ist das relevante Java-Dokument: docs.oracle.com/javase/9/docs/api/java/util/Set.html. Neben der Verwendung eines Java 9+ JDK müssen Sie möglicherweise Ihre IDE oder Ihr Build-Tool anpassen, um die Java 9-Konformität zu verwenden (z. B. für Maven wären es ähnliche Schritte wie hier, aber auf 1.9 gesetzt: stackoverflow.com/ Fragen/16798066/…)

    – Holly Cummins

    25. Juni 2018 um 9:30 Uhr

  • Wünschte, wir könnten Java 9 verwenden. Wir leben in der Vergangenheit! 🙁

    – WheelersWebservices

    26. Februar 2019 um 18:03 Uhr

  • das ist gut, aber es gibt einige Einschränkungen hinsichtlich der Größe der Argumente …

    – Radoslaw Iwanow

    22. Oktober 2019 um 0:37 Uhr

Benutzer-Avatar
Evgeniy Dorofeev

Nein, aber Sie können es so machen

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

1333750cookie-checkExistiert .asSet(…) in irgendeiner API?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy