Проблема в доступе к элементам из Google HashMultimap - PullRequest
0 голосов
/ 26 октября 2010

Я использую приведенный ниже код для получения и обработки значения из 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));

В приведенном выше коде, если элемент карты (или запись) имеет тип Элемент, то я хочу выполнить некоторую операцию. Если это тип HashMultimap, сделайте какую-нибудь другую операцию. Как я могу проверить и передать объект другой функции.

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Поскольку это 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 голос
/ 26 октября 2010

Используйте ключевое слово instanceof.

Примерно так:
if (item instanceof Element) //Do things

...