Xem xét rằng chúng tôi có Set<String> stringSet
chúng tôi có thể sử dụng như sau:
Java 10 (Danh sách không thể thay đổi)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Danh sách có thể sửa đổi)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Theo tài liệu cho phương pháptoList()
Không có sự đảm bảo nào về loại, tính biến đổi, tính tuần tự hoặc tính an toàn của luồng của Danh sách được trả về; nếu cần thêm quyền kiểm soát Danh sách được trả về, hãy sử dụng toCollection (Nhà cung cấp).
Vì vậy, nếu chúng ta cần một triển khai cụ thể, ví dụ như ArrayList
chúng ta có thể thực hiện theo cách này:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Danh sách không thể thay đổi)
Chúng ta có thể sử dụng Collections::unmodifiableList
phương thức và bọc danh sách được trả về trong các ví dụ trước. Chúng ta cũng có thể viết phương thức tùy chỉnh của riêng mình như:
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);
}
}
Và sau đó sử dụng nó như:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Một khả năng khác là sử dụng collectingAndThen
phương thức cho phép thực hiện một số biến đổi cuối cùng trước khi trả về kết quả:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Một điểm cần lưu ý là phương thức Collections::unmodifiableList
trả về một khung nhìn không thể thay đổi của danh sách đã chỉ định, theo tài liệu . Bộ sưu tập chế độ xem không thể thay đổi là một bộ sưu tập không thể thay đổi và cũng là chế độ xem trên bộ sưu tập sao lưu. Lưu ý rằng những thay đổi đối với bộ sưu tập sao lưu vẫn có thể xảy ra và nếu chúng xảy ra, chúng có thể được nhìn thấy qua chế độ xem không thể thay đổi. Nhưng phương thức collector Collectors.unmodifiableList
trả về danh sách thực sự bất biến trong Java 10 .
java.util.Collection
: O (0)