So erstellen Sie schnell und bequem eine Arrayliste mit einem Element [duplicate]

Lesezeit: 7 Minuten

Benutzer-Avatar
David T.

Gibt es irgendwo eine Utility-Methode, die dies in einer Zeile tun kann? Ich kann es nirgends finden Collectionsoder List.

public List<String> stringToOneElementList(String s) {
    List<String> list = new ArrayList<String>();
    list.add(s);
    return list;
}

Ich möchte das Rad nicht neu erfinden, es sei denn, ich plane, schicke Felgen darauf zu setzen.

Nun … der Typ kann sein Tund nicht String. aber du verstehst es. (mit all den Nullprüfungen, Sicherheitsprüfungen … usw.)

  • Nun, Sie sollten diese Methode überhaupt nicht anwenden. An den Stellen, an denen Sie die Methode aufrufen, ersetzen Sie einfach den Aufruf durch die gesuchte “einzeilige” Transformation.

    – Rohit Jain

    3. Dezember 2013 um 18:34 Uhr

  • Ich meine, Sie wollen alles innerhalb der Methode in eine einzige Zeile umwandeln, richtig? Nun, dann macht diese Methode nichts, was ohne sie nicht möglich wäre. Was du tun würdest, ist, return Arrays.asList(s);. Aber was ist dann der Sinn dieser zusätzlichen Methode? Es fungiert nur als Delegierter. Entfernen Sie es einfach. Und wo immer Sie anrufen stringToOneElementList(s)Anruf Arrays.asList(s)das ist es.

    – Rohit Jain

    3. Dezember 2013 um 18:40 Uhr

  • oh okay, ich glaube ich verstehe. Nun, der einzige Grund, warum ich diese Methode hatte, war, dass ich nicht wusste, wo dieser “Magic One Liner” war. Daher habe ich diese Stackoverflow-Frage überhaupt gestellt. wenn ich diese eine Zeile schon wüsste Arrays.asList(s), warum sollte ich dann meine Frage hier auf Stackoverflow stellen? Ich war überrascht, dass sich diese Convenience-Methode in Arrays und nicht in Collections befindet.

    – David T.

    3. Dezember 2013 um 18:48 Uhr

  • Arrays ist eine Dienstprogrammklasse, die verschiedene andere Methoden enthält, die Sie möglicherweise von Zeit zu Zeit singen. Der Grund für diese Methode in Arrays Klasse ist, weil die Methode wirklich aus konvertiert array zu einem list. Die Methode ist so definiert, dass sie var-args akzeptiert. Alle Argumente, die Sie ihm übergeben, werden also intern nur in ein Array konvertiert. Daraus wird dann eine Liste erstellt. Also, das ist der vorgesehene Ort – Arrays.

    – Rohit Jain

    3. Dezember 2013 um 18:51 Uhr


  • Das Design in Java bestand darin, eine beliebige Anzahl von Zeichenfolgen in Listen umzuwandeln, die nur eine Zeichenfolge enthalten (aber auch bedeutet, dass es nur eine Möglichkeit gibt, dies zu tun). In anderen Sprachen gibt es mehr als einen Weg, etwas zu tun, also wollte ich nur den besten Weg wissen (in diesem Fall nur einen Weg), zum Beispiel Ruby, Sie können “blah.first” und “blah.last” sagen “ im Gegensatz zu wie „bla[0]”, was sehr praktisch und besser lesbar ist. In Java scheint das nicht der Fall zu sein. Entschuldigung, ich hoffe, das hat Sinn gemacht

    – David T.

    3. Dezember 2013 um 19:00 Uhr

Benutzer-Avatar
Elliot Frisch

Feste Größe List

Der einfachste Weg, den ich kenne, besteht darin, ein einzelnes Element mit fester Größe zu erstellen List mit Arrays.asList(T...) wie

// Returns a List backed by a varargs T.
return Arrays.asList(s);

Variable Größe List

Wenn es in der Größe variieren muss, können Sie eine konstruieren ArrayList und die feste GrößeList wie

return new ArrayList<String>(Arrays.asList(s));

und (in Java 7+) können Sie die verwenden Diamant-Operator <> es zu machen

return new ArrayList<>(Arrays.asList(s));

Liste einzelner Elemente

Sammlungen können eine Liste mit einem einzigen Element zurückgeben, wobei die Liste unveränderlich ist:

Collections.singletonList(s)

Der Vorteil hier ist, dass die IDE-Codeanalyse nicht vor einzelnen Element-asList(..)-Aufrufen warnt.

  • das ist GENAU das was ich gesucht habe. Danke! Ich habe keine Ahnung, warum dies in Arrays und nicht in Listen oder Sammlungen oder was auch immer ist.

    – David T.

    3. Dezember 2013 um 18:45 Uhr

  • Seien Sie vorsichtig mit dieser Lösung. Sie können die Liste nicht ändern. Wenn Sie beispielsweise versuchen, dieser Liste Elemente hinzuzufügen, wird eine UnsupportedOperationException ausgelöst!

    – Adamsan

    28. August 2014 um 9:33 Uhr


  • Collections.singletonList(elm); ist vorzuziehen, da es eine unveränderliche Liste erstellt.

    – Ravish Bhagdev

    3. Juni 2015 um 10:39 Uhr

  • @ RavishBhagdev – nicht immer. Es kann vorkommen, dass Sie der Liste später etwas hinzufügen möchten. Tatsächlich habe ich genau den Ansatz dieser Antwort in einem Pfadfindungsalgorithmus in Diagrammen verwendet.

    – Chthonic-Projekt

    17. März 2016 um 22:48 Uhr

  • Ab JDK9 wird es eine Methode List.of​(E e1) geben, die eine unveränderliche Liste (download.java.net/java/jdk9/docs/api/java/util/List.html#of-E-)

    – Nicola

    25. August 2017 um 10:25 Uhr


Benutzer-Avatar
Andreas

Collections.singletonList(object)

Die durch diese Methode erstellte Liste ist unveränderlich.

  • IntelliJ IDEA empfiehlt stattdessen automatisch dies Arrays.asList(object).

    – Matej

    15. Oktober 2015 um 13:36 Uhr

  • Beachten Sie, dass die von dieser Methode erstellte Liste unveränderlich ist.

    – Mandar Pathak

    9. August 2016 um 0:52 Uhr

  • Sie haben sich also nicht die Zeit genommen, eine Zeile über die Folgen dieses Aufrufs zu schreiben? Unveränderliche Liste

    – Martin Asenow

    27. August 2018 um 14:44 Uhr

  • Bitte markieren Sie dies als akzeptierte Antwort. Das ist viel besser als Arrays.asList.

    – Orri

    18. Oktober 2018 um 7:41 Uhr

Benutzer-Avatar
rgettman

Sie können die Utility-Methode verwenden Arrays.asList und dieses Ergebnis in ein neues einspeisen ArrayList.

List<String> list = new ArrayList<String>(Arrays.asList(s));

Andere Optionen:

List<String> list = new ArrayList<String>(Collections.nCopies(1, s));

und

List<String> list = new ArrayList<String>(Collections.singletonList(s));

Mit Java 7+ können Sie den “Diamant-Operator” verwenden und ersetzen new ArrayList<String>(...) mit new ArrayList<>(...).

Java 9

Wenn Sie Java 9+ verwenden, können Sie die List.of Methode:

List<String> list = new ArrayList<>(List.of(s));

Unabhängig von der Verwendung der einzelnen oben genannten Optionen können Sie sich dafür entscheiden, die nicht zu verwenden new ArrayList<>() Wrapper, wenn Ihre Liste nicht veränderlich sein muss.

  • Ich bin überrascht, dass Sie der Einzige sind, der das erwähnt Collections.singletonList.

    – Jean-François Savard

    26. Mai 2015 um 0:11 Uhr

  • Ich bin noch überraschter, dass @AndyJ gepostet hat Collections.singletonList nach meinem Kommentar und bekam 2x mehr Stimmen als Ihre Antwort, die es bereits hatte und seit 3 ​​Jahren dort ist … Es macht immer Spaß, über alte Kommentare zu stolpern.

    – Jean-François Savard

    20. Mai 2016 um 16:47 Uhr

  • Ich bin überrascht, dass niemand außer Ihnen List.of(s) erwähnt hat.

    – Klingenfaust

    16. März um 7:42

Mit Java-8-Streams:

Stream.of(object).collect(Collectors.toList())

oder wenn Sie ein Set benötigen:

Stream.of(object).collect(Collectors.toSet())

Benutzer-Avatar
Benutzer167019

Die anderen Antworten verwenden alle Arrays.asList()die eine nicht änderbare Liste zurückgibt (an UnsupportedOperationException wird ausgelöst, wenn Sie versuchen, ein Element hinzuzufügen oder zu entfernen). Um eine veränderliche Liste zu erhalten, können Sie die zurückgegebene Liste in eine neue einschließen ArrayList Wie einige Antworten zeigen, ist jedoch eine sauberere Lösung zu verwenden Guaven Listen.newArrayList() (verfügbar seit mind Guave 10erschienen 2011).

Zum Beispiel:

Lists.newArrayList("Blargle!");

  • Dies funktioniert nicht, wenn das angegebene Element Iterable implementiert, zum Beispiel: Lists.newArrayList(Paths.get("/usr/local/this/is/not/single/element")); Sie möchten ein Array mit einem einzelnen Pfadelement erstellen. Sie erhalten jedoch eine Liste mit 7 Pfadelementen.

    – Bob

    6. Dezember 2016 um 2:52 Uhr


  • Ah ich sehe. Ja standardmäßig Java wählt die spezifischste Methodewas in diesem Fall der Fall ist Lists#newArrayList(Iterable<? extends E> elements). Du kannst tun Lists.newArrayList(new Path[] {Paths.get("/usr/local/this/is/not/single/‌​element")}) explizit die vararg-Methode aufrufen oder einfach eine leere Liste erstellen (List<Path> p = Lists.newArrayList()) und fügen Sie das Element hinzu (p.add(Paths.get("/usr/local/this/is/not/single/‌​element"))).

    – Benutzer167019

    18. Dezember 2016 um 20:33 Uhr


Benutzer-Avatar
SLaks

Ganz einfach:

Arrays.asList("Hi!")

  • Dies funktioniert nicht, wenn das angegebene Element Iterable implementiert, zum Beispiel: Lists.newArrayList(Paths.get("/usr/local/this/is/not/single/element")); Sie möchten ein Array mit einem einzelnen Pfadelement erstellen. Sie erhalten jedoch eine Liste mit 7 Pfadelementen.

    – Bob

    6. Dezember 2016 um 2:52 Uhr


  • Ah ich sehe. Ja standardmäßig Java wählt die spezifischste Methodewas in diesem Fall der Fall ist Lists#newArrayList(Iterable<? extends E> elements). Du kannst tun Lists.newArrayList(new Path[] {Paths.get("/usr/local/this/is/not/single/‌​element")}) explizit die vararg-Methode aufrufen oder einfach eine leere Liste erstellen (List<Path> p = Lists.newArrayList()) und fügen Sie das Element hinzu (p.add(Paths.get("/usr/local/this/is/not/single/‌​element"))).

    – Benutzer167019

    18. Dezember 2016 um 20:33 Uhr


Benutzer-Avatar
vegemite4me

Da Guava erwähnt wird, dachte ich, ich würde auch vorschlagen Eclipse-Sammlungen (früher bekannt als GS Collections).

Die folgenden Beispiele geben alle a zurück List mit einem einzigen Artikel.

Lists.mutable.of("Just one item");
Lists.mutable.with("Or use with");
Lists.immutable.of("Maybe it must be immutable?");
Lists.immutable.with("And use with if you want");

Für andere Sammlungen gibt es ähnliche Methoden.

1360580cookie-checkSo erstellen Sie schnell und bequem eine Arrayliste mit einem Element [duplicate]

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

Privacy policy