예를 들어, 나는 현재 이것을하고있다 :
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
이길 수 있습니까?
답변
List<String> list = new ArrayList<String>(listOfTopicAuthors);
답변
List<String> l = new ArrayList<String>(listOfTopicAuthors);
답변
우리는 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 에서 진정한 불변 목록을 리턴합니다 .
답변
이것을 설정하십시오 :
Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors);
Map을 위해 이것을보십시오 :
Map<String, String> listOfTopicAuthors = .....
// List of values:
List<String> mapValueList = new ArrayList<String>(listOfTopicAuthors.values());
// List of keys:
List<String> mapKeyList = new ArrayList<String>(listOfTopicAuthors.KeySet());
답변
Guava를 사용하는 경우 Lists 클래스 newArrayList
에서 메소드 를 정적으로 가져옵니다 .
List<String> l = newArrayList(setOfAuthors);
답변
코드의 컨텍스트를 통해 정확히 무엇을하고 있는지 확실하지 않지만 …
왜 listOfTopicAuthors
변수를 전혀 만들지 않습니까?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
“….”은 새로운 것이든지 다른 위치에서 온 것이 든 세트가 작동한다는 것을 나타냅니다.