[java] Set <String>을 String []로 변환하는 방법?

내가 얻을 필요가 String[]의 아웃 Set<String>,하지만 난 그것을하는 방법을 모르겠어요. 다음은 실패합니다 :

Map<String, ?> myMap = gpxlist.getAll();
Set<String> myset = myMap.keySet();
String[] GPXFILES1 = (String[]) myset.toArray(); // Here it fails.

작동하도록 수정하려면 어떻게해야합니까?



답변

Set#toArray(T[])같은 크기의 형식화 된 배열 인수를 사용하는 방법을 사용하십시오 .

String[] GPXFILES1 = myset.toArray(new String[myset.size()]);

다른 크기를 사용할 수도 있지만 toArray(), 제공된 인수를 재사용하는 대신 반환 할 새 배열을 작성하는 메소드 가 강제 로 사용되므로 효율성이 떨어질 수 있습니다.

의 소스 코드AbstractCollection#toArray() 도 참조하십시오 .


답변

자바 11

인터페이스 의 새로운 기본 toArray메소드를 Collection사용하면 콜렉션의 요소를 원하는 런타임 유형의 새로 작성된 배열로 전송할 수 있습니다. 그것은 소요 IntFunction<T[]> generator인자로와로 사용할 수 있습니다 :

 String[] array = set.toArray(String[]::new);

이미 비슷한 방법 Collection.toArray(T[])이 있으며이 추가는 더 이상 null인수 로 전달할 수 없다는 것을 의미 합니다.이 경우 해당 방법에 대한 참조가 모호하기 때문입니다. 그러나 두 방법 모두 NPE를 던지기 때문에 여전히 괜찮습니다.

자바 8

Java 8에서는 스트림 API를 사용할 수 있습니다.

String[] array = set.stream().toArray(String[]::new);

우리는 또한의 오버로드 된 버전을 사용 할 수 있습니다 toArray () 소요 IntFunction<A[]> generator로를 :

String[] array = set.stream().toArray(n -> new String[n]);

여기서 생성기 함수의 목적은 정수 (원하는 배열의 크기)를 취하여 원하는 크기의 배열을 생성하는 것입니다. 나는 개인적으로 람다 식을 사용하는 후자보다 메소드 참조를 사용하는 전자의 접근법을 선호합니다.


답변

toArray (T [] a) 메소드를 사용하십시오 .

String[] array = set.toArray(new String[0]);


답변

구아바 스타일 :

Set<String> myset = myMap.keySet();
FluentIterable.from(mySet).toArray(String.class);

자세한 정보 : https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/FluentIterable.html


답변

Java 11에서는 Collection.toArray(generator)method 를 사용할 수 있습니다 . 다음 코드는 새로운 문자열 배열을 만듭니다.

Set<String> set = Set.of("one", "two", "three");
String[] array = set.toArray(String[]::new)

참조 : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html#toArray(java.util.function.IntFunction)


답변

Set<String> stringSet= new HashSet<>();
String[] s = (String[])stringSet.toArray();


답변

나는 같은 상황에 직면했다.

먼저 필요한 구조를 선언하여 시작합니다.

Set<String> myKeysInSet = null;
String[] myArrayOfString = null;

필자의 경우 JSON 객체가 있으며이 JSON의 모든 키를 문자열 배열에 저장해야합니다. 은 Using GSON 라이브러리를 , 내 설정에 키와 움직임을 얻을 수 JSON.keySet ()를 사용 :

myKeysInSet = json_any.keySet();

이를 통해 필요에 따라 모든 키가있는 Set 구조가 있습니다. 따라서 문자열 배열에 값을 지정하면됩니다. 아래 코드를 참조하십시오 :

myArrayOfString = myKeysInSet.toArray(new String[myKeysInSet.size()]);

이것이 StackOverflow의 첫 번째 대답이었습니다. 오류가 발생하여 죄송합니다. : D