So erstellen Sie schnell und bequem eine Arrayliste mit einem Element [duplicate]
Lesezeit: 7 Minuten
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
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
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.
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())
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 GuavenListen.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
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
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.
13605800cookie-checkSo erstellen Sie schnell und bequem eine Arrayliste mit einem Element [duplicate]yes
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 anrufenstringToOneElementList(s)
AnrufArrays.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 inArrays
Klasse ist, weil die Methode wirklich aus konvertiertarray
zu einemlist
. 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