2013-04-15 16 views
14
Set<String> keys = mappings.keySet(); 
String[] keyArray = (String[]) keys.toArray(); 

String hashmapDetails = ""; 
for(int p=0; p < keyArray.length; p++){ 
    String[] details = keyArray[p].split("/"); 
    hashmapDetails += details[1]; 
    hashmapDetails += mappings.get(keyArray[p]); 
    if (p != keyArray.length -1){ 
     hashmapDetails += ";"; 
    } 
} 

私は理解が不十分ですが、私はハッシュマップの使い方を探そうとしています。私はtoArray()がObject []を返すことを理解しています。しかし、それをString []にキャストすることはできませんか?コードでわかるように、後で配列を通って分割やその他の文字列操作をする必要があります。これによりObject []をハッシュマップキーセットからString []に変換しますか?

私はエラーを得た:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] 

私はこれに取り組むべきか上の任意のガイダンスは大歓迎です。ありがとう!

答えて

21

Object[]アレイをString[]アレイに単純にキャストすることはできません。代わりに、より良い動作するはずthe generic version of toArrayを、使用する必要があります。

String[] keyArray = keys.toArray(new String[keys.size()]); 

はまた、(つまり、すべてのgetのコールが保存されます)と優れた文字列の連結効率のためのStringBuilderを使用するあなたは、単にentrySetを反復処理することができることに注意してください:

StringBuilder hashmapDetails = new StringBuilder(); 
for(Map.Entry<String, String> e : mappings.entrySet()) { 
    String[] details = e.getKey().split("/"); 
    hashmapDetails += details[1]; 
    hashmapDetails += e.getValue(); 
    hashmapDetails += ";"; 
} 

String result = hashmapDetails.substring(0, hashmapDetails.length() - 1); 
+0

ありがとうございました! toArrayのジェネリック版の最初の解決策は、私には十分なものでした。ありがとうございました! =) – lyk

+1

'toArray(新しいString [0])'バージョンは確かに行く方法です。それは簡潔で、あなたがしていることを正確に表しています。 – NRitH

+0

@NRitHかもしれないが、不要なオブジェクトを作成するので、私は "サイズ"のバージョンを好む。 – assylias

2

Setを反復するだけで、私はtoArrayのステップが必要ではないと思います。このようなもの:

Set<String> keys = mappings.keySet(); 

String hashmapDetails = ""; 
for(String key : keys){ 
    String[] details = key.split("/"); 
    hashmapDetails += details[1]; 
    hashmapDetails += mappings.get(key); 
    if (p != keys.size() -1){ 
     hashmapDetails += ";"; 
    } 
} 
6

Stringetにキーセットをキャストすることは可能です。試してみてください:

String[] keys = map.keySet().toArray(new String[0]); 
関連する問題