2011-05-12 29 views
216

我需要從Set<String>中獲得String[],但我不知道該怎麼做。以下失敗:如何將Set <String>轉換爲String []?

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

我該如何解決它,使其工作?

+4

使用Javadoc中明確提到的'toArray()'方法。 – EJP 2015-08-24 10:18:42

+1

Java 8解決方案:https://stackoverflow.com/questions/5982447/how-to-convert-setstring-to-string/32179686#32179686 – 2016-08-23 07:43:40

回答

375

使用Set#toArray(T[])方法獲取相同大小的類型化數組參數。

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

不同的大小也可以,但是這將迫使toArray()方法來創建一個新的數組,而不是返回重用提供參數,它可能最終是效率較低的。另見the source code of AbstractCollection#toArray()

+0

您還可以指定大小爲0的數組: 'String [] GPXFILES1 = myset .toArray(new String [0]);' – sactiw 2016-05-25 13:31:27

+1

@sactiw:這已經被其他答案覆蓋了。閱讀另一個答案的評論,爲什麼不建議這樣做。 – BalusC 2016-05-25 13:42:22

+0

Java非常煩人 – slashdottir 2017-09-11 22:48:47

31

使用toArray(T[] a)方法:

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

當您向toray()傳遞一個太小的數組時,toArray()方法必須使用反射來構造一個正確大小的新數組。與傳遞至少大小集合本身的數組相比,這具有明顯更差的性能。 因此''[0]'應該被接受的答案中的'[myset.size()]'替換。 – k2col 2016-04-28 21:23:28

+1

總是想知道爲什麼字符串[0]工作而不是大小 – 2017-03-03 01:00:21

36

在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表達式的方法。

+8

有點矯枉過正,你不覺得嗎? – 2015-11-26 07:29:31

+4

對我很好 – 2016-08-16 08:02:53

+0

你不需要'stream()'使用'toArray()'。它可以'set.toArray(new String [0])' – 2017-05-12 10:21:59

0

我面臨同樣的情況。

我首先聲明我所需要的結構:

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

相關問題