2015-03-03 1 views
0

J'ai une LinkedHashMap qui a des doublons dans la sortie. La carte ressemble à ceci:Filtrer les doublons de type Objet de la liste en Java

Map<Object, List<Object>> myMap= new LinkedHashMap<Object, List<Object>>(); 

Quand je sysout cette carte le résultat ressemble à ceci:

Test.example.id = [Source.table1.id, Source.table2.id], 
Test.example.name = [Source.table1.name, Source.table1.name] 

Maintenant, je voudrais filtrer tous les doublons sur un enregistrement de sorte que la sortie serait être:

Test.example.id = [Source.table1.id, Source.table2.id], 
Test.example.name = [Source.table1.name] 

Quelqu'un peut-il m'aider avec cela?

Merci!

Kevin

+0

Est-il nécessaire que votre Carte soit de type Objet? Il semble que ce pourrait être une chaîne ou un type numérique? – Nessuno

+3

Mettez-le dans 'Set'. – Pshemo

+0

La carte contient des objets d'une classe personnalisée qui a plusieurs fonctions que j'utiliserai plus tard. – Kevin

Répondre

1

Avec Java 8, vous pouvez le faire comme ça (il modifie la carte en place):

myMap.replaceAll((k, v) -> v.stream().distinct().collect(toList())); 

Sinon, vous auriez à itérer sur les valeurs manuellement, les mettre dans un Set pour obtenir la propriété distincte et ensuite les remettre dans la carte.

for(Map.Entry<Object, List<Object>> entry : myMap.entrySet()) { 
    myMap.put(entry.getKey(), new ArrayList<>(new HashSet<>(entry.getValue()))); //you can use a new map if you want to keep the original one 
} 
+0

Je ne peux pas utiliser Java 8 dans ce projet. Je vais essayer votre suggestion maintenant, je reviendrai à vous. Merci :) – Kevin

+0

Fonctionne comme un charme merci beaucoup !! – Kevin