Ich habe versucht, ein int-Array in List zu konvertieren, bin den ungewohnten Weg der Verwendung von Java 8 Stream gegangen und habe mir das ausgedacht
Arrays.stream(arr).boxed().collect(Collectors.toList());
Ich habe immer noch Schwierigkeiten, diese Zeile vollständig zu verstehen.
Warum wird
Collectors.toList()
in diesem Fall eineArrayList<Integer>
Implementierungsschnittstelle zurückgegebenList
? Warum nichtLinkedList<Integer>
oder eine andere generische Klasse, die derList
Schnittstelle entspricht? Ich kann nichts darüber finden, außer eine kurze Erwähnung von ArrayList hier im Abschnitt API-Hinweise.Was bedeutet das linke Feld ? Offensichtlich ist der generische Rückgabetyp ( in meinem Code hier). Und ich denke, ist das generische Typargument der Methode, aber wie werden sie angegeben? Ich habe in das Collector- Interface-Dokument geschaut und konnte es nicht aufnehmen.
Stream.collect()
R
ArrayList<Integer>
<R, A>
Collectors.toList()
in diesem Fall ein zurückgegeben? ArrayList<Integer>
" Möglicherweise wird kein zurückgegeben ArrayList
. Die List
Implementierung ist undefiniert , sodass Sie sich nicht darauf verlassen können, welche Implementierung zurückgegeben wird. Wie der Javadoc sagt: "Es gibt keine Garantien für den Typ , die Veränderlichkeit, die Serialisierbarkeit oder die Thread-Sicherheit der zurückgegebenen Liste."
toList()
gibt kein ArrayList
oder zurück List
- es gibt ein zurück Collector
, das schließlich ein erstellt und zurückgibt List
- auch in der Dokumentation heißt es: "... Es gibt keine Garantien für den Typ , die Veränderlichkeit, die Serialisierbarkeit oder die Thread-Sicherheit der zurückgegebenen Liste; Wenn mehr Kontrolle über die zurückgegebene Liste erforderlich ist, verwenden Sie toCollection (Lieferant) .... "
R
ist der generische Typ des resultierenden Typs.A
der generische Typ des Zwischenakkumulationstyps des Collectors. Dies ist ein Implementierungsdetail für die Funktionsweise eines Kollektors. Er teilt und erobert, auch für die parallele Verarbeitung, und sammelt zuerst in Zwischentypen.