Programming

세트를 변환하는 가장 간결한 방법

procodes 2020. 5. 9. 17:05
반응형

세트를 변환하는 가장 간결한 방법 목록으로


나는 현재 이것을하고있다 :

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.unmodifiableListJava 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] ) );

"...."은 새 위치이든 다른 위치에서 왔든 세트가 작동했음을 나타냅니다.

참고 URL : https://stackoverflow.com/questions/2319538/most-concise-way-to-convert-a-setstring-to-a-liststring

반응형