从Google HashMultimap访问元素时出现问题

时间:2010-10-26 13:10:35

标签: java guava multimap

我正在使用以下代码获取&谷歌HashMultimap的过程值

    HashMultimap hmm = new HashMultimap();
    HashMultimap hmm2 = new HashMultimap();
    Element ele;
:
    hmm2.put("name","Amit");
    hmm.put("Amit",ele);
    hmm.put("rohit",hmm2);
 :   
    Iterator itr =  hmm.keys().iterator();
    String ky = (String) itr.next();
    System.out.println(hmm.get(ky));
    ky = (String) itr.next();
    System.out.println(hmm.get(ky));

在上面的代码中,如果map元素(或条目)是Element类型,那么我想做一些操作。如果是HashMultimap类型,则执行其他操作。如何检查并将对象传递给另一个函数。

2 个答案:

答案 0 :(得分:2)

由于这是HashMultimap也是SetMultimap,当您致电hmm.get(ky)时,返回的值将是该密钥的所有值的Set 。然后,您应该能够遍历Set中的每个值,并对这些值使用instanceof。如果每个密钥不会有多个值,则不应使用Multimap开头,而应使用普通HashMap

    HashMultimap hmm = HashMultimap.create();
    HashMultimap hmm2 = HashMultimap.create();
    Element ele = new Element();
    hmm2.put("name", "Amit");
    hmm.put("Amit", ele);
    hmm.put("rohit", hmm2);
    Iterator itr = hmm.keys().iterator();
    String ky = (String) itr.next();

    Set elements = hmm.get(ky);
    Iterator elementsItr = elements.iterator();
    Object val = elementsItr.next();
    if (val instanceof Element) {
        doElementStuff((Element) val);
    }

    ky = (String) itr.next();
    elements = hmm.get(ky);
    elementsItr = elements.iterator();
    val = elementsItr.next();
    if (val instanceof Element) {
        doElementStuff((Element) val);
    }

关键是在get()上调用HashMultimap会返回Set个值,而不是单个值。

答案 1 :(得分:1)

使用instanceof关键字。

像这样:
if (item instanceof Element) //Do things