java - 在 java 8 中迭代并验证两个对象列表

标签 java java-8

我有 2 个列表:

  • 列表1:对象1(Empno1,Empname1,Salary1)

  • 列表2:对象2(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 实现此目的的最佳方法

最佳答案

查找另一个列表中是否存在一个确切对象的一种可能的解决方案是:

boolean b = list1.parallelStream().anyMatch(s -> list2.contains(s));

正如 @Kris 也提到的,它需要为您的 Object 类实现 equal 方法才能像这样重写:

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 哈希码的想法来自Effective Java 书籍,有关它的更多信息,请关注:https://stackoverflow.com/a/299748/2137378

关于java - 在 java 8 中迭代并验证两个对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57720604/

相关文章:

java - 为什么我的返回声明没有被识别?

java - JFrame 有时根本不出现?

java-8 - 如何将列表转换为 Map<K,V> 而不是 List<V>

Java 8 可重复的自定义注解

Java 8 : Difference between method reference Bound Receiver and UnBound Receiver

java - 使用循环让用户输入一个整数 10 次,然后得到最小值

java - 使用ScrollableResults和MySql的字符编码问题

java - 如何使用 firebase 搜索查询结果项实现 OnClick 项

java - 如何使用 Stream API 展平此 List<C1>,其中 C1 包含单个元素的 C2 集合?

Java-8 流 : Convert Map<String, List<List<DataType>>> 到 Map<String, List<DataType>>