将MapIterator返回的MultiKey断开到各个键中

时间:2012-07-16 19:00:09

标签: java apache-commons apache-commons-collection

我正在使用Apache Commons Collections创建一个MultiKeyMap,它将存储两个具有一个相应值的键,然后使用MapIterator遍历地图。我遇到的问题是我需要将MapIterator返回的密钥分解回单个密钥而不是单个“复合”。虽然我可以分割包含“复合”键的字符串或使用反射,但这些选项看起来都不是很优雅。

为了对问题进行建模,我创建了以下示例代码

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()返回MultiKey [Key 3A,Key 3B],但我想要做的是将键分配给各个变量,例如myKey1 = it.getKey().keys[0]myKey2 = it.getKey().keys[1],但我找不到任何内容JavaDoc实现这一点。

是否可以将MapIterator返回的键分解为各个键而不使用反射或操作it.getKey()返回的字符串?

1 个答案:

答案 0 :(得分:8)

我检查了source code for commons 3.2,而MultiKeyMap键是MultiKey的实例,它有一个getKey(int index)方法。还有一个返回Object []的getKeys()方法。它需要演员表,但你可以这样做:

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