우리는 Set<String> stringSet
다음을 사용할 수 있다고 생각합니다 .
Java 10 (수정 불가능한 목록)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (수정 가능한 목록)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
방법에 대한 의사 에 따라toList()
리턴 된 List의 유형, 변경 가능성, 직렬화 가능성 또는 스레드 안전성에 대한 보장은 없습니다. 리턴 된 List에 대한 추가 제어가 필요한 경우 toCollection (Supplier)을 사용하십시오.
따라서 특정 구현이 필요한 경우 예를 들어 다음과 ArrayList
같이 얻을 수 있습니다.
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (수정 불가능한 목록)
Collections::unmodifiableList
메소드 를 사용 하고 이전 예제에서 리턴 된 목록을 랩핑 할 수 있습니다 . 우리는 또한 다음과 같이 자신 만의 커스텀 메소드를 작성할 수 있습니다 :
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);
}
}
그런 다음 다음과 같이 사용하십시오.
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
또 다른 가능성은 collectingAndThen
결과를 반환하기 전에 최종 변환을 수행 할 수있는 방법을 사용하는 것입니다.
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
한 주에 점은 방법이 있다는 것입니다 Collections::unmodifiableList
에 따라, 지정된리스트의 변경 불가능한 뷰를 반환 문서 . 수정할 수없는보기 모음은 수정할 수없는 모음이며 배경 모음에 대한보기이기도합니다. 백업 모음에 대한 변경은 여전히 가능할 수 있으며, 변경이 발생하면 수정할 수없는보기를 통해 볼 수 있습니다. 그러나 콜렉터 메소드 Collectors.unmodifiableList
는 Java 10 에서 진정한 불변 목록을 리턴합니다 .
java.util.Collection
: O (0)