如何迭代两个多地图并打印文件中的差异? [英] How to iterate two multi maps and print the difference in file?

查看:129
本文介绍了如何迭代两个多地图并打印文件中的差异?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个多重映射,如下所示:

  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 code> Sets.intersection(source_multimap.keySet(),target_multimap.keySet())forEach(key - > {
Multiset< String> multiset1 = ImmutableMultiset.copyOf(source_multimap.get ;
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的值不同:[1,2]
b的值不同:[2]

并且如果你想要包含差异的唯一的映射替换 Sets.intersection 集.union

  source:{a = [1,1 ],b = [1]} 
目标:{a = [1,2],b = [1,2],c = [1]}
a具有不同的值:[1,2]
b的值不同:[2]
c的值不同:[1]


I have two multimaps as below :

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

It will give us pair of key-value with single-keys and multiple-values. I want to compare like this below :

if(mulimap1.get(key).equals(multimap2.get(key))) then compare the collection for values. if(multimap1.getValues()!=multimap2.getValues()) then print the values different.

解决方案

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

Example output:

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]

And if you want to include differences for keys unique to either map substitute Sets.intersection with 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]

这篇关于如何迭代两个多地图并打印文件中的差异?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆