2012-07-16 18 views
5

İki anahtarı karşılık gelen bir değerde depolayacak ve daha sonra harita üzerinde gezinmek için MapIterator kullanan bir MultiKeyMap oluşturmak için Apache Commons Koleksiyonları kullanıyorum. Elimde olan sorun, MapIterator tarafından döndürülen anahtarları tek bir "kompozit" yerine tek tek anahtarlara geri göndermem gerekiyor. "Kompozit" anahtarı içeren dizeyi bölebildiğimde veya yansımaları kullanırken, bu seçeneklerden hiçbiri çok şık görünmüyor.MapIterator tarafından döndürülen MultiKey'yi tek tek anahtarlara döndürün

sorunu modellemek için aşağıdaki örnek kodu

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()); 
} 
oluşturduk

it.getKey() döner MultiKey [Tuş 3A, 3B Anahtar] ama ne yapmak istiyorum, bir şey gibi bireysel değişkenlere tuşları atamak olduğunu myKey1 = it.getKey().keys[0] ve myKey2 = it.getKey().keys[1] ancak bunu başarmak için JavaDoc'ta hiçbir şey bulamıyorum.

MapIterator tarafından döndürülen anahtarları yansıma kullanmadan veya it.getKey() tarafından döndürülen dizeyi işlemeden bağımsız tuşlara ayırmak mümkün mü?

cevap

8

commons 3.2 için source code'u denetledim ve MultiKeyMap anahtarları, getKey (int dizini) yöntemine sahip olan MultiKey örneklerini gösterir. Object [] öğesini döndüren getKeys() yöntemi de vardır. Bir döküm gerektirir, ancak aşağıdakileri yapabilirsiniz:

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

Teşekkürler Eric - Seçenek 1 mükemmel :) –

İlgili konular