我有2个列表:
列表1:Object1 (Empno1, Empname1,Salary1)
列表2:Object2(Empno2, Empname2,Salary2) Object3(Empno3, Empname3,Salary3)
鉴于List1的大小与List2的大小不同。
我想遍历List1和List2,如果List1对象中的Empno
与List2对象的Empno
相同,那么我们必须验证List1对象中的Empname
与List2对象的Empname
这是使用旧版Java的代码:
boolean flag=false;
for(Object1 obj1:list1) {
for(Object2 obj2:list2) {
if(obj1.getEmpno()==obj2.getEmpno()) {
if(obj1.getEmpname().equals(obj2. getEmpname())){
flag=true;
}
}
}
}
哪种是用java8实现此目的的最佳方法
答案 0 :(得分:0)
找到另一个列表中是否存在一个确切对象的一种可能解决方案是:
boolean b = list1.parallelStream().anyMatch(s -> list2.contains(s));
就像@Kris也提到的那样,它需要实现equal方法,以便像这样覆盖您的Object类:
class Object1 {
int empNo;
String empName;
@Override
public boolean equals(Object obj) {
return ((Object2)obj).empNo == this.empNo &&
((Object2)obj).empName.equalsIgnoreCase(this.empName);
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + Integer.valueOf(empNo).hashCode();
result = 31 * result + this.empName.hashCode();
return result;
}
}
17 31哈希码的想法来自有效Java书籍,有关此信息的更多信息,请遵循:https://stackoverflow.com/a/299748/2137378
答案 1 :(得分:0)
只需使用Stream::anyMatch
方法
boolean result = list1.stream()
.anyMatch(o1 -> list2.stream()
.anyMatch(o2 -> o1.getEmpno() == o2.getEmpno()
&& o1.getEmpname().equals(o2.getEmpname())));