2016-05-04 37 views
0

我作爲空兩個屈德寧:如何迭代兩個多地圖並在文件中打印差異?

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()); 
    } 
} 

它會給我們對與單按鍵和多值鍵值。我想比較如下:

if(mulimap1.get(key).equals(multimap2.get(key)))然後比較集合的值。 if(multimap1.getValues()!= multimap2.getValues())然後打印不同的值。

回答

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) 
    )); 
}); 

輸出示例:

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] 

如果你想包括獨特要麼映射替代Sets.intersectionSets.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

作品以及感謝。 – rockersdeal

相關問題