2017-06-12 4 views
0

J'utilise LinkedHashMultimap dans mon projet. J'ai besoin d'aplatir les valeurs tout en préservant l'ordre d'insertion. Par exemple, avecAplatir SetMultiMap et conserver l'ordre d'insertion

SetMultimap<String, Integer> m = LinkedHashMultimap.create(); 
m.put("a", 1); 
m.put("b",2); 
m.put("a",3); 

Je reçois la sortie suivante

a : [1,3] 
b : 2 

Mais je dois

a : 1 
b : 2 
a : 3 

ou je besoin de la sortie dans une liste

[a,1,b,2,a,3] 

PS J'utilise LinkedHashMultimap parce que je ne veux pas faire double emploi values pour une key et je dois préserver l'ordre d'insertion

Comment puis-je faire si je peux itérer la sortie ci-dessus pour un traitement ultérieur?

+0

Vous pouvez créer une classe wrapper en étendant LinkedHashMultiMap et ajouter un tableau comme l'un de ses champs qui garde la trace de l'ordre exactement comme vous le voulez aussi –

Répondre

5

Entries sont retournés et sont réitérés dans l'ordre où ils ont été insérés afin que vous puissiez faire ce qui suit pour ne pas perdre les avantages de Multimaps.

for (Map.Entry<String, Integer> entry : m.entries()) { 
    System.out.println(entry.getKey() + " : " + entry.getValue()); 
} 
1

Vous pouvez utiliser Liste dans la carte pour stocker plusieurs valeurs pour la même clé.

public class Test { 

    public static void main(final String[] args) { 
     LinkedList<Values> list = new LinkedList<Values>(); 
     list.add(new Values("a", 1)); 
     list.add(new Values("b", 2)); 
     list.add(new Values("a", 3)); 
     System.out.println(list); 
    } 
} 

class Values { 
    String key; 
    int value; 

    public Values(final String key, final int value) { 
     super(); 
     this.key = key; 
     this.value = value; 
    } 

    @Override 
    public String toString() { 
     return key + "," + value; 
    } 
} 

La sortie de ce programme est:

[a,1, b,2, a,3] 

J'espère que c'est la façon dont vous le voulez.

+0

je besoin d'une version aplatie en conservant l'ordre d'insertion comme '[ a, 1, b, 2, a, 3] 'Krishna Kuntala .. Si je vous ai donné une sortie, je ne recevrai pas la commande. droite! – user2731629

+1

@ user2731629 J'espère que ma réponse mise à jour résout votre problème avec l'utilisation de l'objet et d'une liste chaînée au lieu de Linked hash map. –

+0

Désolé !! .. Il contient des doublons. Je ne veux pas de valeurs en double. Si vous ajoutez un 'a, 3' à nouveau, il ne devrait pas l'ajouter. C'est pourquoi j'ai utilisé SetMuliMap. – user2731629