我需要從Set<String>
中獲得String[]
,但我不知道該怎麼做。以下失敗:如何將Set <String>轉換爲String []?
Map<String, ?> myMap = gpxlist.getAll();
Set<String> myset = myMap.keySet();
String[] GPXFILES1 = (String[]) myset.toArray(); // Here it fails.
我該如何解決它,使其工作?
我需要從Set<String>
中獲得String[]
,但我不知道該怎麼做。以下失敗:如何將Set <String>轉換爲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()
方法來創建一個新的數組,而不是返回重用提供參數,它可能最終是效率較低的。另見the source code of AbstractCollection#toArray()
。
您還可以指定大小爲0的數組: 'String [] GPXFILES1 = myset .toArray(new String [0]);' – sactiw 2016-05-25 13:31:27
@sactiw:這已經被其他答案覆蓋了。閱讀另一個答案的評論,爲什麼不建議這樣做。 – BalusC 2016-05-25 13:42:22
Java非常煩人 – slashdottir 2017-09-11 22:48:47
使用toArray(T[] a)方法:
String[] array = set.toArray(new String[0]);
當您向toray()傳遞一個太小的數組時,toArray()方法必須使用反射來構造一個正確大小的新數組。與傳遞至少大小集合本身的數組相比,這具有明顯更差的性能。 因此''[0]'應該被接受的答案中的'[myset.size()]'替換。 – k2col 2016-04-28 21:23:28
總是想知道爲什麼字符串[0]工作而不是大小 – 2017-03-03 01:00:21
在Java 8中,我們可以使用流API:
String[] array = set.stream().toArray(String[]::new);
我們還可以使用的重載版本的toArray()這需要IntFunction<A[]> generator
爲:
String[] array = set.stream().toArray(n -> new String[n]);
發電機功能的目的在這裏我s取一個整數(所需數組的大小)併產生一個所需大小的數組。我個人更喜歡使用方法引用的前一種方法,而不是使用lambda表達式的方法。
有點矯枉過正,你不覺得嗎? – 2015-11-26 07:29:31
對我很好 – 2016-08-16 08:02:53
你不需要'stream()'使用'toArray()'。它可以'set.toArray(new String [0])' – 2017-05-12 10:21:59
番石榴風格:
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
我面臨同樣的情況。
我首先聲明我所需要的結構:
Set<String> myKeysInSet = null; String[] myArrayOfString = null;
就我而言,我有一個JSON對象,我需要在此JSON所有的密鑰存儲在一個字符串數組。使用GSON library,我用JSON.keySet()領取鑰匙並移動到我的設置:
myKeysInSet = json_any.keySet();
有了這個,我有一組結構,所有的按鍵,因爲我需要它。所以我只需要將值賦給我的字符串數組。請參見下面的代碼:
myArrayOfString = myKeysInSet.toArray(new String[myKeysInSet.size()]);
這是我在StackOverflow的第一個答案。 對不起,發生錯誤:D
使用Javadoc中明確提到的'toArray()'方法。 – EJP 2015-08-24 10:18:42
Java 8解決方案:https://stackoverflow.com/questions/5982447/how-to-convert-setstring-to-string/32179686#32179686 – 2016-08-23 07:43:40