java - 从 google HashMultimap 访问元素时出现问题

标签 java guava multimap

我使用下面的代码从 google 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 元素(或条目)是元素类型,那么我想做一些操作。如果是HashMultimap类型则进行其他操作。我如何检查对象并将其传递给另一个函数。

最佳答案

由于这是一个 HashMultimap ,它也是一个 SetMultimap,因此当您调用 hmm.get(ky) 时,返回的值将是是该键的所有值的集合。然后,您应该能够迭代 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);
    }

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

关于java - 从 google HashMultimap 访问元素时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023968/

相关文章:

C++ 多映射迭代器失效

c++ - 交换 multimap<int, int> 中的每对值

java - 映射、分组、值列表

java - 如何按日期获取汇率?

java - 将数据作为 cookie 存储在浏览器中与 session 中

java.rmi.NoSuchObjectException : no such object exception

java - 在多线程环境中并行执行每个子任务

java - Guava 的 TypeToken 能否获取泛型字段的具体类型?

java - 不兼容类型 - 发现 :int required:boolean on timer. Schedule run() curInterval

java - Google RateLimiter 不适用于计数器