416 Stimmen

Wie man schnell und bequem ein ArrayList mit einem Element erstellt

Gibt es irgendwo eine Hilfsmethode, die dies in einer Zeile tun kann? Ich kann es nirgendwo in Collections oder Liste finden.

public List stringToOneElementList(String s) {
    List list = new ArrayList();
    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 T sein und nicht String. Aber du verstehst den Punkt. (mit allen Nullprüfungen, Sicherheitsüberprüfungen... usw.)

570voto

Elliott Frisch Punkte 190865

Fixe Größe Liste

Der einfachste Weg, den ich kenne, ist die Erstellung einer fixierten einzelnen Element Liste mit Arrays.asList(T...) wie

//Gibt eine Liste zurück, die durch varargs T unterstützt wird.
return Arrays.asList(s);

Variable Größe Liste

Wenn sie in der Größe variieren muss, können Sie eine ArrayList und die fixierte GrößeListe konstruieren

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

und (in Java 7+) können Sie den Diamantenoperator <> verwenden, um es zu machen

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

Liste mit einem Element

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

Collections.singletonList(s)

Der Vorteil hierbei ist, dass die Codeanalyse der IDEs keine Warnungen über AsList(..)-Aufrufe mit einem einzelnen Element ausgibt.

393voto

Andrew Punkte 4608
Collections.singletonList(object)

die Liste, die von dieser Methode erstellt wird, ist unveränderlich.

87voto

rgettman Punkte 171653

Sie können die Hilfsmethode Arrays.asList verwenden und das Ergebnis in ein neues ArrayList einspeisen.

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

Weitere Optionen:

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

und

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

Mit Java 7+ können Sie den "Diamond-Operator" verwenden, indem Sie new ArrayList(...) durch new ArrayList<>(...) ersetzen.

Java 9

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

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

Unabhängig von der Verwendung jeder oben genannten Option können Sie sich entscheiden, den new ArrayList<>() Wrapper nicht zu verwenden, wenn Ihre Liste nicht veränderbar sein muss.

37voto

Marko Jurisic Punkte 834

Mit Java 8 Streams:

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

oder wenn Sie eine Menge benötigen:

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

22voto

user167019 Punkte 558

Die anderen Antworten verwenden alle Arrays.asList(), die eine nicht veränderbare Liste zurückgibt (eine UnsupportedOperationException wird ausgelöst, wenn Sie versuchen, ein Element hinzuzufügen oder zu entfernen). Um eine veränderbare Liste zu erhalten, können Sie die zurückgegebene Liste in eine neue ArrayList einwickeln, wie es ein paar Antworten zeigen, aber eine sauberere Lösung ist die Verwendung von Guava's [Lists.newArrayList()](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Lists.html#newArrayList()) (verfügbar seit mindestens Guava 10, veröffentlicht im Jahr 2011).

Zum Beispiel:

Lists.newArrayList("Blargle!");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X