Sahip olduğumuzu göz önünde bulundurarak Set<String> stringSet
aşağıdakileri kullanabiliriz:
Java 10 (Değiştirilemez liste)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Değiştirilebilir Listeler)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Yöntem için doc başınatoList()
Döndürülen Listenin türü, değiştirilebilirliği, serileştirilebilirliği veya iş parçacığı güvenliği konusunda hiçbir garanti yoktur; döndürülen Liste üzerinde daha fazla denetim gerekiyorsa, toCollection (Tedarikçi) öğesini kullanın.
Yani belirli bir uygulamaya ihtiyacımız olursa, örneğin ArrayList
bu şekilde elde edebiliriz:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Değiştirilemez Listeler)
Collections::unmodifiableList
Yöntemi kullanabilir ve önceki örneklerde döndürülen listeyi kapatabiliriz . Ayrıca kendi özel yöntemimizi yazabiliriz:
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);
}
}
Ve sonra şu şekilde kullanın:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Başka bir olasılık, collectingAndThen
sonuç döndürülmeden önce bazı nihai dönüşümlerin yapılmasına izin veren yöntemi kullanmaktır :
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Dikkat edilmesi gereken bir nokta , yöntemin Collections::unmodifiableList
, dokümana göre belirtilen listenin değiştirilemez bir görünümünü döndürmesidir . Değiştirilemez bir görünüm koleksiyonu değiştirilemeyen ve aynı zamanda bir destek koleksiyonuna bir görünümdür. Destek koleksiyonunda değişikliklerin hala mümkün olabileceğini ve gerçekleşmeleri durumunda değiştirilemeyen görünümden görülebileceğini unutmayın. Ancak toplayıcı yöntemi Java 10'daCollectors.unmodifiableList
gerçekten değişmez bir liste döndürür .
java.util.Collection
: O (0)