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

Xin lỗi vì sự thiếu hiểu biết của tôi nhưng tôi đang cố gắng khám phá việc sử dụng hashmaps. Tôi hiểu rằng toArray() trả về một đối tượng []. Tuy nhiên, không thể gõ nó vào một String []? Như bạn có thể thấy trong các mã, sau đó, tôi cần phải đi qua một mảng và làm một số tách và thao tác String khác.chuyển đổi Object [] từ một keyset hashmap thành String []?

Bằng cách này, tôi đã nhận ra lỗi:

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

Bất kỳ hướng dẫn về làm thế nào tôi nên giải quyết vấn đề này được đánh giá rất nhiều. Cảm ơn!

Trả lời

21

Bạn không thể chỉ cần bỏ một mảng Object[] vào mảng String[]. thay vào đó bạn nên sử dụng the generic version of toArray, mà nên làm việc tốt hơn:

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

Cũng lưu ý rằng bạn chỉ có thể lặp qua các entrySet (mà sẽ lưu tất cả các get cuộc gọi) và sử dụng một StringBuilder cho hiệu quả chuỗi nối tốt hơn:

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

Cảm ơn sự giúp đỡ của bạn! Giải pháp đầu tiên với phiên bản chung của toArray là đủ tốt cho tôi, cảm ơn bạn! =) – lyk

+1

Phiên bản 'toArray (new String [0])' chắc chắn là con đường để đi. Nó súc tích và thể hiện chính xác những gì bạn đang làm. – NRitH

+0

@NRitH có thể nhưng nó tạo ra một đối tượng không cần thiết vì vậy tôi thích phiên bản "có kích thước". – assylias

2

Bạn chỉ có thể lặp qua số Set, tôi không nghĩ rằng bước toArray là cần thiết. Một cái gì đó như thế này:

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

Có thể truyền keyset thành String []. Hãy thử điều này:

String[] keys = map.keySet().toArray(new String[0]); 
Các vấn đề liên quan