2013-04-15 10 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 += ";"; 
    } 
} 

Wybacz mój brak zrozumienia, ale próbuję zbadać użycie hashmap. Rozumiem, że funkcja toArray() zwraca obiekt []. Jednak nie jest możliwe, aby wpisać go do String []? Jak widać w kodach, później muszę przejść przez tablicę i wykonać kilka operacji dzielenia i innych operacji na Stringach.przekonwertować obiekt [] z zestawu kluczy hashmap na ciąg []?

Robiąc to mam błąd:

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

Wszelkie wskazówki, w jaki sposób powinien uporać się z tym jest bardzo ceniona. Dzięki!

Odpowiedz

21

Nie można po prostu rzucić tablicy Object[] do tablicy String[]. Należy zamiast tego użyć the generic version of toArray, które powinny działać lepiej:

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

Należy również pamiętać, że można po prostu iteracyjne nad entrySet (który uratuje wszystkie połączenia get) i użyć StringBuilder dla lepszej wydajności konkatenacji:

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

Dzięki za pomoc! Pierwsze rozwiązanie z ogólną wersją toArray było wystarczająco dobre dla mnie, dziękuję! =) – lyk

+1

Wersja 'toArray (new String [0])' jest zdecydowanie do zrobienia. Jest zwięzły i wyraża dokładnie to, co robisz. – NRitH

+0

@NRitH możliwe, ale tworzy niepotrzebny obiekt, więc wolę wersję "wielkości". – assylias

2

Można po prostu powtórzyć przez Set, nie sądzę, krok toArray jest konieczne. Coś takiego:

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

Możliwe jest rzutowanie zestawu kluczy na ciąg []. Wypróbuj to:

String[] keys = map.keySet().toArray(new String[0]); 
Powiązane problemy