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

Pau*_*l H 5 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());
}
Run Code Online (Sandbox Code Playgroud)

it.getKey()返回多键[键3A,3B键],但我想要做的就是分配键单个变量,像myKey1 = it.getKey().keys[0]myKey2 = it.getKey().keys[1],但是我无法找到在JavaDoc任何实现这一目标.

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

Eri*_*zke 8

我检查了源代码为公地3.2,和MultiKeyMap键的实例多键,它具有一个信息getKey(INT指数)方法.还有一个返回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());
}
Run Code Online (Sandbox Code Playgroud)