我必须比较Java中的两个类似表,可能使用集合类。但输入源是剪贴板而不是数据库。样本表: -比较Java中的两个表(不是数据库)
Table1:
|EmpID| Name| Age|Dept|
|123|John|30|Ops|
|456|Peter|40|HR|
Table2:
|EmpID| Name| Age|Dept|
|123|John|30|Ops|
|462|Peter|40|Dev|
这里雇员ID是唯一的。 Table1的Row1应与Table2的Row1比较&等。如果EmpID &中的相应列中的数据匹配,则应显示为匹配。 如果EmpID与第二行不匹配,则应报告为差异,搜索表2的下一行&找到EmpID。报告是否匹配。 如果未找到,则应在Table1中报告额外报告或在Table2中报告Miss。所有这些行必须在比较为Match,Diff,Extra或Miss之后进行报告。
试图在此处使用嵌套的HashMap进行比较,当只比较一行时,它可以正常工作。 当多个行添加到HashMap中时,它执行笛卡尔产品比较I.e.表1,行1与表2,行2 &等因此得到错误的输入。 (请参阅下面的示例代码)。 能否请您建议我如何做这些比较/迭代,因为我还必须在比较之后进行报告。
HashMap<String,String> Table1= new HashMap<String,String>();
Table1. put(Name, "John");
Table1. put(Age,"30");
Table1.put(Dept, "Ops");
HashMap<String,String> Table2= new HashMap<String,String>();
Table2.put(Name, "John");
Table2. put(Age,"30");
Table2.put(Dept, "Ops");
HashMap<String, HashMap<String, String>>Table3= new HashMap<String, HashMap<String,String>>();
Table3.put(EmpId, "123");
HashMap<String, HashMap<String, String>>Table4= new HashMap<String, HashMap<String,String>>();
Table4.put(EmpId, "123");
List<String> match = new List<String>();
List< String> diff = new List<String>();
for (String tempe: Table3.keySet()){
for(String temp: Table4.keySet()) {
If(tempe.equals temp){
System.out.println("Emp Id match");
for(String tem: Table1.keySet()){
for(String te: Table2.keySet()){
If(tem equals te){
match.add(tem);
}else{
diff.add(temp + te);
}
}
}
else{
System.out.println(" EmpId not matching");
}
}
}
for(String mat: match){
System.out println("Matched values: + mat ");
}
for(String dif: diff){
System.out.println("Different values: + dif");
}
所需的输出是:
匹配度: 的Emp ID:123 键:名字,年龄,DEPT 值:约翰,30,行动
DIFF: 的Emp ID:456 重点:部门 值:人力资源,开发
附加: InTable1:的Emp ID:789(打印键&的值,如果有的话) 在表2:EMPID:879(打印中的任意键&值)
小姐: 在表1: 的Emp ID:489 名字,年龄,DEPT 的Xyz,26,行动 在表2:同样如果有的话
你可以发布你的例子所需的输出吗?要求对我来说不是很清楚 – Massimo
您应该使用类/对象来适当保存您的数据,当您发现自己嵌套地图/集合时,几乎总是有时间重新考虑设计(正如您所看到的,这会变得非常复杂和混乱)快速)。然后比较将是关于一行代码 – Rogue