如何在Java 8中从一个列表中删除另一个列表中的多个对象元素

📅 2026/6/30 11:18:04
如何在Java 8中从一个列表中删除另一个列表中的多个对象元素
有一个名为 Employee 的类它有 4 个字段。DatapublicstaticclassEmployee{privateStringempId;privateStringname;privateStringgroup;privateintsalary;publicEmployee(StringempId,Stringname,Stringgroup,intsalary){this.empIdempId;this.namename;this.groupgroup;this.salarysalary;}}有两个员工类列表仅根据empId、name 和 group属性而不根据salary从 listEmployeesA 中删除所有已在 listEmployeesB 中的对象元素。publicstaticvoidmain(String[]args){ListEmployeelistEmployeesAnewArrayList(Arrays.asList(newEmployee(101,Mark,A,20000),newEmployee(102,Tom,B,3000),newEmployee(103,Travis,C,5000),newEmployee(104,Diana,null,3500),newEmployee(105,Keith,D,4200),newEmployee(106,Liam,E,6500),newEmployee(107,Whitney,F,6100),newEmployee(108,Tina,null,2900),newEmployee(109,Patrick,G,3400)));ListEmployeelistEmployeesBnewArrayList(Arrays.asList(newEmployee(101,Mark,A,20000),newEmployee(103,Travis,C,5000),newEmployee(104,Diana,null,3500)));// 创建判断是否在 listEmployeesB 中的条件PredicateEmployeeinListBemp-listEmployeesB.stream().anyMatch(b-Objects.equals(emp.getEmpId(),b.getEmpId())Objects.equals(emp.getName(),b.getName())Objects.equals(emp.getGroup(),b.getGroup()));// 过滤并收集结果ListEmployeeresultlistEmployeesA.stream().filter(inListB.negate()).collect(Collectors.toList());System.out.println(result);}结果