2012-07-16 12 views
5

Tôi đang sử dụng Bộ sưu tập Apache Commons để tạo một MultiKeyMap sẽ lưu trữ hai khóa với một giá trị tương ứng và sau đó sử dụng MapIterator để đi qua bản đồ. Vấn đề tôi có là tôi cần phải phá vỡ các phím được trả về bởi MapIterator trở lại vào các khóa riêng lẻ chứ không phải là một "tổng hợp" đơn lẻ. Trong khi tôi có thể tách chuỗi chứa khóa "tổng hợp" hoặc sử dụng phản xạ, không phải tùy chọn nào trong số này cũng có vẻ rất thanh lịch.Break MultiKey trả về bởi MapIterator vào các khóa riêng lẻ

Để mô hình được vấn đề, tôi đã tạo ra mẫu mã sau đây

MultiKeyMap multiKeyMap = new MultiKeyMap(); 

multiKeyMap.put("Key 1A","Key 1B","Value 1"); 
multiKeyMap.put("Key 2A","Key 2B","Value 2"); 
multiKeyMap.put("Key 3A","Key 3B","Value 3"); 

MapIterator it = multiKeyMap.mapIterator(); 

while (it.hasNext()) { 
    it.next(); 
    System.out.println(it.getKey()); 
    System.out.println(it.getValue()); 
} 

it.getKey() lợi nhuận MultiKey [3A Key, chính 3B] nhưng những gì tôi muốn làm là gán các phím để biến cá nhân, một cái gì đó như myKey1 = it.getKey().keys[0]myKey2 = it.getKey().keys[1] nhưng tôi không thể tìm thấy bất kỳ thứ gì trong JavaDoc để đạt được điều này.

Có thể ngắt các khóa được MapIterator trả về vào các khóa riêng mà không sử dụng phản xạ hoặc thao tác chuỗi trả về bởi it.getKey() không?

Trả lời

8

Tôi đã kiểm tra source code cho commons 3.2 và khóa MultiKeyMap là các phiên bản MultiKey, có phương thức getKey (int index). Ngoài ra còn có một phương thức getKeys() trả về Object []. Nó đòi hỏi một diễn viên, nhưng bạn có thể làm:

MultiKeyMap multiKeyMap = new MultiKeyMap(); 

multiKeyMap.put("Key 1A","Key 1B","Value 1"); 
multiKeyMap.put("Key 2A","Key 2B","Value 2"); 
multiKeyMap.put("Key 3A","Key 3B","Value 3"); 

MapIterator it = multiKeyMap.mapIterator(); 

while (it.hasNext()) { 
    it.next(); 

    MultiKey mk = (MultiKey) it.getKey(); 

    // Option 1 
    System.out.println(mk.getKey(0)); 
    System.out.println(mk.getKey(1)); 

    // Option 2 
    for (Object subkey : mk.getKeys()) 
     System.out.println(subkey); 

    System.out.println(it.getValue()); 
} 
+0

Cảm ơn Eric - Lựa chọn 1 là hoàn hảo :) –

Các vấn đề liên quan