내가 얻을 필요가 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)
답변
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