2010-10-26 53 views
0

J'utilise sous le code pour obtenir & valeur de processus de google HashMultimapproblème pour accéder à des éléments de 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)); 

Dans le code ci-dessus, si l'élément de carte (ou entrée) est le type d'élément alors je veux faire un peu opération. S'il s'agit du type HashMultimap, effectuez une autre opération. Comment puis-je vérifier et passer l'objet à une autre fonction.

+2

vivez-vous dans Java 1.4 monde? Utilisez générique! – nanda

+0

c'est ma limitation de projet. Je ne peux rien faire –

Répondre

2

Puisque c'est un HashMultimap qui est aussi un SetMultimap,. Vous devriez alors pouvoir parcourir chacune des valeurs du Set et utiliser instanceof pour ces valeurs. S'il n'y a pas de valeurs multiples pour chaque touche, vous ne devez pas utiliser de Multimap pour commencer et vous devez simplement utiliser 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); 
    } 

Le point clé est que l'appel get() sur un HashMultimap renvoie une Set de valeurs et non une seule valeur.

+0

Parlez-vous d'accéder à la valeur comme 'SetMultimap o = (SetMultimap) hmm.get (ky);'. Il donne une erreur d'exécution. –

+0

Réponse mise à jour pour essayer et clarifier davantage. –

1

Utilisez le mot-clé instanceof.

comme ceci:
lorsque vous appelez hmm.get(ky) la valeur retournée va être un Set de toutes les valeurs de cette clé if (item instanceof Element) //Do things

+0

J'avais déjà essayé. ça ne marche pas –

+3

pouvez-vous s'il vous plaît poster le code que vous avez utilisé avec instanceof? – Woot4Moo

+0

Si vous me demandez alors c'est un code complet. Si vous demandez à @ Woot4Moo alors je suppose qu'il prend l'objet de type d'objet –