如何比较两个包含具有共享属性的对象的arraylist
How to compare two arraylist containing objects with shared properties
如何比较两个包含具有共享属性的对象的数组列表。
例如:我有一个 pojo class Abc
Class Abc {
String dataString ;
int rowNum;
......
}
Abc list1 contains - 2000 records & more sometimes
Abc list2 contains - 60 records & more sometimes
我想比较 list1 dataString 和 list2 datastring 以及 return rownum
如果 list1.dataString 不等于 list2.dataString
如果数据字符串不匹配,我需要 List1 中的行号。 List2 rownum可以忽略。
如果在这种情况下,您有两个不同的列表并希望进行比较,一种简单的方法可以是两个具有相等条件的 foreach 循环,然后具有以下值:
for(Abc list1Obj : list1)
{
for(Abc list2Obj : list2)
{
if(list1.dataString.Equals(list2.dataString))
{
int value = Integer.parseInt(list1.rowNumber);
}
}
}
在这种情况下,它将针对 list1 中的每个项目与 list2 中的每个项目。
在 high-level 术语中,您的代码应该:
- 遍历 list1
- 为每个元素检查其数据字符串是否出现在 list2 中的某处
- 如果是,则在结果中包含 list1 元素的行号
为了使代码更快,在第二步中可以预先计算 list2 数据字符串集。还是用high-level来说,代码是:
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());
}
如何比较两个包含具有共享属性的对象的数组列表。
例如:我有一个 pojo class Abc
Class Abc {
String dataString ;
int rowNum;
......
}
Abc list1 contains - 2000 records & more sometimes
Abc list2 contains - 60 records & more sometimes
我想比较 list1 dataString 和 list2 datastring 以及 return rownum 如果 list1.dataString 不等于 list2.dataString
如果数据字符串不匹配,我需要 List1 中的行号。 List2 rownum可以忽略。
如果在这种情况下,您有两个不同的列表并希望进行比较,一种简单的方法可以是两个具有相等条件的 foreach 循环,然后具有以下值:
for(Abc list1Obj : list1)
{
for(Abc list2Obj : list2)
{
if(list1.dataString.Equals(list2.dataString))
{
int value = Integer.parseInt(list1.rowNumber);
}
}
}
在这种情况下,它将针对 list1 中的每个项目与 list2 中的每个项目。
在 high-level 术语中,您的代码应该:
- 遍历 list1
- 为每个元素检查其数据字符串是否出现在 list2 中的某处
- 如果是,则在结果中包含 list1 元素的行号
为了使代码更快,在第二步中可以预先计算 list2 数据字符串集。还是用high-level来说,代码是:
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());
}