gpt4 book ai didi

java - 如何比较两个具有多个值的键的映射?

转载 作者:行者123 更新时间:2023-11-30 06:58:31 26 4
gpt4 key购买 nike

我按以下方式有以下两张 map :

Map<String,List<String>> sourceTags = sourceList.get(block);
Map<String,List<String>> targetTags = targetList.get(block);

我想将 sourceTags 中的值列表与与该键对应的 targetTags 中的值列表进行比较。

现在,映射条目中的值将采用以下方式:

SourceTag = [20C=[:ABC//0000000519983150], 22F=[:CAMV//MAND, :CAMV//MANDA], 98A[:XDTE//20160718,:MEET//20160602,:RDTE//20160719]
TargetTag = [20C=[:ABC//0000000519983150], 22F=[:CAMV//MAND],98A=[:MEET//20160602,:RDTE//20160719]

我想要如下输出:

Blockquote

key-22F,比较子键为CAMV的值列表,如果子键存在,则比较差异,否则如果子键不存在也报告。

Blockquote

再次, key 98A,子 key :XDTE,MEET,RDTE。如果子项存在并且发现源和目标中的值存在差异,则报告。否则,如果未找到子键,则报告为在源或目标中未找到,值的情况也是如此。

if(sub-key found){
//compare their values
}else{
//report as sub-key not found
}

我编写了以下程序:

<小时/>

编辑程序

设置标签 = sourceTags.keySet();

        for(String targetTag : tags){

if(targetTags.containsKey(targetTag)){

List<String> sourceValue = sourceTags.get(targetTag);
List<String> targetValue = targetTags.get(targetTag);


for(String sValue : sourceValue){

for(String tValue : targetValue){

if(sValue.length() > 4 && tValue.length() > 4){
//get keys for both source and target
String sKey = sValue.substring(1, 5);
String tKey = tValue.substring(1,5);

//get values for both source and target
String sTagValue= sValue.substring(sValue.lastIndexOf(sKey), sValue.length());
String tTagValue = tValue.substring(tValue.lastIndexOf(tKey),tValue.length());

if(sKey.equals(tKey)){
if(!sTagValue.equals(tTagValue)){
values = createMessageRow(corpValue, block ,targetTag, sTagValue,tTagValue);
result.add(values);
}
}
}
}
}
}else{
System.out.println(sourceTags.get(targetTag).get(0));
values = createMessageRow(corpValue,block,targetTag,sourceTags.get(targetTag).get(0),"","Tag: "+targetTag+" not availlable in target");
result.add(values);
}

执行后,比较报告显示错误值。

请帮忙!!

最佳答案

实际上,您的代码有一个主要的逻辑流程。当您比较使用相同键访问的两个映射中包含的列表时,您可以执行以下操作:

for(int index = 0; index < Math.max(sourceValue.size(), targetValue.size()); index ++ ){
if(index<sourceValue.size() && index<targetValue.size()){
//Do your comparations...
}

这意味着您将沿着具有相同索引的两个列表继续,然后比较这两个项目。您永远不会将第一个列表中的项目与第二个列表中不具有相同索引的项目进行比较。

我给你举个例子:有两个列表

LIST_A = (A, B, C)  
LIST_B = (C, B, A)

这些是您正在进行的比较:

A == C
B == B
C == A

很明显,即使两个列表包含相同的元素,您会发现的唯一对应关系是 B == B。

您需要将第一个列表中的每个项目与第二个列表中的所有项目进行比较,以获得所有匹配对。像这样的东西(为了清晰起见,没有优化和优雅):

    for(String sValue : sourceValue){
for(String tValue : targetValue){
if(sValue.length() > 4 && tValue.length() > 4){
String sKey = sValue.substring(1,5);
String tKey = tValue.substring(1,5);
if(sKey.equals(tKey)){
//Do your logic...
}
}
}
}

这样,当索引到达第一个列表的末尾时,您甚至不需要像现在一样继续处理另一个列表...

关于java - 如何比较两个具有多个值的键的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com