2011-05-12 23 views
216

Set<String>'dan String[] almam gerekiyor, ancak nasıl yapılacağını bilmiyorum. Aşağıdaki hatalar:Set <String> Set []?

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

Çalışması için nasıl düzeltebilirim? Aynı boyuttan yazılan bir dizi argümanı alarak Set#toArray(T[]) yöntemini kullanın.

+4

Javadoc'ta açıkça belirtilen "toArray()" yöntemiyle. – EJP

+1

Java 8 çözümü: https://stackoverflow.com/questions/5982447/how-to-convert-setstring-to-string/32179686#32179686 –

cevap

375

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

farklı bir boyutu da olabilir, ancak bu daha az etkili olduğu sona erebilir sağlanan tartışma, yeniden yerine dönmek için yeni bir dizi oluşturmak için toArray() yöntemi zorlayacaktır. Ayrıca bkz. the source code of AbstractCollection#toArray().

+0

Ayrıca, 0: 'String [] GPXFILES1 = myset dizisini de belirtebilirsiniz .toArray (new String [0]); – sactiw

+1

@sactiw: Bu zaten başka bir cevapla kaplıdır.Bunun neden tavsiye edilmediğine dair diğer cevabı okuyun. – BalusC

+0

Java çok sinir bozucu – slashdottir

31

Kullanım toArray(T[] a) yöntemi:

biz akışları API kullanabilirsiniz Java 8'de
String[] array = set.toArray(new String[0]); 
+20

toArray() yöntemine çok küçük boyutlu bir dizi ilettiğinizde, toArray() yönteminin yansımayı kullanarak doğru boyutta yeni bir dizi oluşturması gerekir. Bu, koleksiyonun kendisinin en azından büyüklüğündeki bir diziden geçmekten önemli ölçüde daha kötü bir performansa sahiptir. Bu nedenle, [0] ', kabul edilen cevapta olduğu gibi' [myset.size()] 'ile değiştirilmelidir. – k2col

+1

her zaman String [0] 'un neden yerine çalıştığını merak ettiler –

36

:

:

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

Ayrıca olarak IntFunction<A[]> generator alır toArray() aşırı yüklü sürümü yararlanabilir

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

Jeneratör fonksiyonunun amacı burada Bir tam sayı (istenen dizinin büyüklüğü) almak ve istenen boyutta bir dizi üretmek için kullanılır. Ben şahsen eskiden yaklaşımı, lambda ifadesini kullanarak daha sonradan bir yöntem referansı kullanmayı tercih ediyorum.

+8

Bir bitkinlik yok, değil mi? –

+4

Bana güzel –

+0

'toArray()' işlevini kullanmak için 'stream() 'gerekmez. 'Set.toArray (yeni String [0]) ' –

0

aynı durumla karşı karşıya edildi.

İhtiyacım yapıları bildirerek başlar:

Benim durumumda

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

, bir JSON nesnesi var ve dize dizisi saklanacak bu JSON tüm anahtarları gerekir. Bunu gerektiği gibi ben, tüm tuşları ile ayarlayın yapıya sahip, Bununla

myKeysInSet = json_any.keySet();

: GSON library kullanarak, anahtarlarını almak için JSON.keySet() kullanın ve benim Set taşıyın. Bu yüzden sadece Dizelerim Dizilimine değerlere ihtiyacım var. Aşağıdaki kod bakın: myArrayOfString = myKeysInSet.toArray(new String[myKeysInSet.size()]);

Bu StackOverflow'daki benim ilk cevaptı. Herhangi bir hata için özür dileriz: D