In Anbetracht dessen, was wir haben Set<String> stringSet
, können wir Folgendes verwenden:
Java 10 (nicht veränderbare Liste)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Änderbare Listen)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Gemäß dem Dokument für die MethodetoList()
Es gibt keine Garantie 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).
Wenn wir also eine bestimmte Implementierung benötigen, ArrayList
können wir sie beispielsweise so erhalten:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (nicht modifizierbare Listen)
Wir können die Collections::unmodifiableList
Methode verwenden und die in den vorherigen Beispielen zurückgegebene Liste umbrechen. Wir können auch unsere eigene benutzerdefinierte Methode schreiben als:
class ImmutableCollector {
public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
return Collector.of( supplier, List::add, (left, right) -> {
left.addAll(right);
return left;
}, Collections::unmodifiableList);
}
}
Und dann benutze es als:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Eine andere Möglichkeit besteht darin, eine collectingAndThen
Methode zu verwenden, mit der eine endgültige Transformation durchgeführt werden kann, bevor das Ergebnis zurückgegeben wird:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Ein zu beachtender Punkt ist, dass die Methode Collections::unmodifiableList
eine nicht änderbare Ansicht der angegebenen Liste gemäß Dokument zurückgibt . Eine nicht modifizierbare Ansichtssammlung ist eine Sammlung, die nicht modifizierbar ist und auch eine Ansicht auf eine Hintergrundsammlung darstellt. Beachten Sie, dass Änderungen an der Hintergrundsammlung möglicherweise weiterhin möglich sind. Wenn sie auftreten, sind sie in der nicht veränderbaren Ansicht sichtbar. Die Collector-Methode Collectors.unmodifiableList
gibt jedoch eine wirklich unveränderliche Liste in Java 10 zurück .
java.util.Collection
: O (0)