如何比较两个包含具有共享属性的对象的数组列表?
比如我有一个pojo类Abc:
Class Abc {
String dataString ;
int rowNum;
......
}
Abc list1 contains - 2000 records & more sometimes
Abc list2 contains - 60 records & more sometimes
我想比较 list1 数据字符串和 list2 数据字符串并返回 rownum if list1.dataString 注意等于 list2.dataString
如果数据字符串不匹配,我需要 List1 中的 rowNumber。 List2 Rownum 可以忽略。
概括而言,您的代码应该:
为了使代码更快,在第二步中可以预先计算list2数据字符串的集合。仍然是高级术语,代码是:
List<int> filtered(List<Abc> list1, List<Abc> list2) {
var dataStrings = setOf(list2.map(x -> x.dataString));
var abcs = list1.filter(x -> dataStrings.contains(x.dataString));
return abcs.map(x -> x.rowNum);
}
在标准Java中,代码看起来更加臃肿,当然:
List<int> filtered(List<Abc> list1, List<Abc> list2) {
Set<String> dataStrings = list2.stream()
.map(x -> x.dataString))
.collect(Collectors.toSet());
return list1.stream()
.filter(x -> dataStrings.contains(x.dataString))
.map(x -> x.rowNum)
.collect(Collectors.toList());
}
如果在这种情况下,您有两个不同的列表并想要进行比较,最简单的方法之一可以是两个具有相等条件的 foreach 循环,然后具有值:
for(Abc list1Obj : list1)
{
for(Abc list2Obj : list2)
{
if(list1.dataString.Equals(list2.dataString))
{
int value = Integer.parseInt(list1.rowNumber);
}
}
}
在这种情况下,它将针对 list1 中的每个项目与 list2 中的每个项目。