I'm using the MultiKeyMap from the commons-collections which provide multikey-value pairs. I have 3 keys which are Strings. I have two problems which I don't see how to solve.
How can I iterate over all multikey-value pairs? With a simple HashMap I know it.
Second, how can I get all multikey-value pairs with the first two keys fixed? That means I would like to get something like this <div class="wrap">
<img src="http://lorempixel.com/900/500"/>
<span class="splitter partA"></span>
<img src="http://lorempixel.com/450/250"/>
</div>
Where the third key is not specified.
答案 0 :(得分:3)
Iteration over key-value for MultiKeyMap is similar to hash map:
arj@arj-VirtualBox:/usr/local/spark/bin$ ./spark-shell
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/launcher/Main
Caused by: java.lang.ClassNotFoundException: org.apache.spark.launcher.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: org.apache.spark.launcher.Main. Program will exit.
For your second request you can write your own method based on the previous iteration.
MultiKeyMap<String, String> multiKeyMap = new MultiKeyMap();
multiKeyMap.put( "a1", "b1", "c1", "value1");
multiKeyMap.put( "a2", "b2", "c2", "value1");
for(Map.Entry<MultiKey<? extends String>, String> entry: multiKeyMap.entrySet()){
System.out.println(entry.getKey().getKey(0)
+" "+entry.getKey().getKey(1)
+" "+entry.getKey().getKey(2)
+ " value: "+entry.getValue());
}
答案 1 :(得分:1)
我使用的commons-collections 4.4
版本提供了forEach
方法。可以如下使用。
MultiKeyMap<String,Integer> multiKeyMap=new MultiKeyMap<>();
multiKeyMap.put("class 9","Div A",30);
multiKeyMap.put("class 9","Div B",40);
multiKeyMap.forEach((key,value)->{
System.out.println(key.getKey(0)+" & "+key.getKey(1)+" -> "+value);
});
Output:
class 9 & Div A -> 30
class 9 & Div B -> 40
答案 2 :(得分:1)
您可以在values()中迭代列表:
for(Object entry: multiKey.values()){ //TODO }
我刚刚发现这是一个有四年历史的问题...