我正在使用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()返回MultiKeyKey 3A,Key 3B,但我想要做的是将键赋给单个变量,比如myKey1 = it.getKey().keys[0]和myKey2 = it.getKey().keys[1],但我在JavaDoc中找不到任何可以实现这一点的东西。
有没有可能在不使用反射或操作it.getKey()返回的字符串的情况下,将MapIterator返回的键分解为单独的键?
发布于 2012-07-17 04:42:05
我检查了Commons3.2的source code,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());
}https://stackoverflow.com/questions/11510788
复制相似问题