2016-05-04 6 views
0

Ich habe zwei multimaps als unten: Einzeltasten und MehrwerteWie man zwei multi Karten iteriert und den Unterschied in der Akte druckt?

ListMultimap<String, String> source_multimap = ArrayListMultimap.create(); 
ListMultimap<String, String> target_multimap = ArrayListMultimap.create(); 

for (SwiftTagListBlock s : source_tagListBlock) { 
    Iterator<Tag> sourcetag_iterator = s.tagIterator(); 

    while (sourcetag_iterator.hasNext()) { 
     Tag tag = (Tag) sourcetag_iterator.next(); 
     source_multimap.put(tag.getName(), tag.getValue()); 
    } 
} 
for (SwiftTagListBlock t : target_tagListBlock) { 
    Iterator<Tag> targettag_iterator = t.tagIterator(); 

    while (targettag_iterator.hasNext()) { 
     Tag tag = (Tag) targettag_iterator.next(); 
     target_multimap.put(tag.getName(), tag.getValue()); 
    } 
} 

Es uns Paar mit Schlüssel-Wert geben. Ich möchte wie folgt vergleichen:

if (mulimap1.get (Schlüssel) .equals (multimap2.get (Schlüssel))) dann vergleichen Sie die Sammlung für Werte. if (multimap1.getValues ​​()! = multimap2.getValues ​​()) dann drucke die Werte anders aus.

Antwort

1
Sets.intersection(source_multimap.keySet(), target_multimap.keySet()).forEach(key -> { 
    Multiset<String> multiset1 = ImmutableMultiset.copyOf(source_multimap.get(key)); 
    Multiset<String> multiset2 = ImmutableMultiset.copyOf(target_multimap.get(key)); 
    System.out.println(key + " has values different: " + Multisets.union(
      Multisets.difference(multiset1, multiset2), 
      Multisets.difference(multiset2, multiset1) 
    )); 
}); 

Beispiel Ausgabe:

source: {a=[1, 1], b=[1]} 
target: {a=[1, 2], b=[1, 2], c=[1]} 
a has values different: [1, 2] 
b has values different: [2] 

Und wenn Sie wollen Unterschiede für Schlüssel enthalten einzigartige entweder zur Karte Ersatz Sets.intersection mit Sets.union:

source: {a=[1, 1], b=[1]} 
target: {a=[1, 2], b=[1, 2], c=[1]} 
a has values different: [1, 2] 
b has values different: [2] 
c has values different: [1] 
+0

Arbeiten gut Dank. – rockersdeal

Verwandte Themen