Java 如何从multihashmap中分割值?
如何分割这些值Java 如何从multihashmap中分割值?,java,collections,apache-commons,Java,Collections,Apache Commons,如何分割这些值 public static void main(String[] args) { // Map<String,Set<String>> dep = new HashMap<String,Set<String>>(); MultiHashMap mp = new MultiHashMap(); mp.put("a", "10"); mp.put("a", "12"); mp.put("a"
public static void main(String[] args) {
// Map<String,Set<String>> dep = new HashMap<String,Set<String>>();
MultiHashMap mp = new MultiHashMap();
mp.put("a", "10");
mp.put("a", "12");
mp.put("a", "11");
mp.put("b", "1");
mp.put("c", "14");
mp.put("e", "");
mp.put("b", "1");
mp.put("b", "2");
mp.put("b", "3");
List list = null;
Set set = mp.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
list = (List) mp.get(me.getKey());
int itemCount = list.size();
for (int z = 0; z < itemCount; z++) {
System.out.println(me.getKey());
System.out.println(me.getValue());
}
}
}
但我需要将值显示为
a:10
a:12
a:11
b:1
b:1
b:2
b:3
c:14
e:
如何像上面那样打印值?打印时显式循环值:
for (int z = 0; z < itemCount; z++) {
for (Object value : (Iterable) me.getValue()) {
System.out.println(String.format("%s: %s", me.getKey(), value));
}
}
for(int z=0;z
也考虑使用番石榴,它具有适当的泛素支持。
< P>这在它所有的恐怖中,做你想要的:package com.sandbox;
import org.apache.commons.collections.MultiHashMap;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class Sandbox {
public static void main(String[] args) {
MultiHashMap mp = new MultiHashMap();
mp.put("a", "10");
mp.put("a", "12");
mp.put("a", "11");
mp.put("b", "1");
mp.put("c", "14");
mp.put("e", "");
mp.put("b", "1");
mp.put("b", "2");
mp.put("b", "3");
for (Object aSet : getSortedSet(mp)) {
Map.Entry me = (Map.Entry) aSet;
for (Object o : (List) me.getValue()) {
System.out.print(me.getKey());
System.out.print(": ");
System.out.println(o);
}
}
}
private static SortedSet getSortedSet(MultiHashMap mp) {
Set set = mp.entrySet();
SortedSet sortedSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Map.Entry e1 = (Map.Entry) o1;
Map.Entry e2 = (Map.Entry) o2;
return ((String) e1.getKey()).compareTo((String) e2.getKey());
}
});
sortedSet.addAll(set);
return sortedSet;
}
}
它的输出是:
a: 10
a: 12
a: 11
b: 1
b: 1
b: 2
b: 3
c: 14
e:
我建议你采纳其他人的建议,改用番石榴多重地图。试试这个
public static void main(String[] args) {
// Map<String,Set<String>> dep = new HashMap<String,Set<String>>();
MultiHashMap mp = new MultiHashMap();
mp.put("a", "10");
mp.put("a", "12");
mp.put("a", "11");
mp.put("b", "1");
mp.put("c", "14");
mp.put("e", "");
mp.put("b", "1");
mp.put("b", "2");
mp.put("b", "3");
List list = null;
Set set = mp.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry<String, List<String>> me = (Map.Entry) i.next();
for(int j = 0 ; j< me.getValue().size(); j++ )
{
System.out.println(me.getKey() +" : " +me.getValue().get(j));
}
}
}
导入org.apache.commons.collections.MultiHashMap中的项目是什么;我建议您改用番石榴及其
Multimap
实现;它确实有一种方法可以按您想要的方式进行迭代(.entries()
),并且与commons collection不同,它支持泛型。您确定:for(Object value:me.getValue())因为它的错误“只能迭代java.lang.Iterable的数组或实例”。@user2444474您需要泛型,或者(蹩脚的)若要强制转换由me.getValue()
返回的对象,我同意,需要常规。但是使用multihashmap,有什么办法吗?太好了,我还有一个问题要问两天。我希望你能回答:stackoverflow.com/q/16928580/2444474
public static void main(String[] args) {
// Map<String,Set<String>> dep = new HashMap<String,Set<String>>();
MultiHashMap mp = new MultiHashMap();
mp.put("a", "10");
mp.put("a", "12");
mp.put("a", "11");
mp.put("b", "1");
mp.put("c", "14");
mp.put("e", "");
mp.put("b", "1");
mp.put("b", "2");
mp.put("b", "3");
List list = null;
Set set = mp.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry<String, List<String>> me = (Map.Entry) i.next();
for(int j = 0 ; j< me.getValue().size(); j++ )
{
System.out.println(me.getKey() +" : " +me.getValue().get(j));
}
}
}
e :
b : 1
b : 1
b : 2
b : 3
c : 14
a : 10
a : 12
a : 11