Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从multihashmap中分割值?_Java_Collections_Apache Commons - Fatal编程技术网

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