首页 > 解决方案 > 从自定义列表中删除项目

问题描述

我有两个自定义 List 对象。如果两个列表中的 Id 匹配,我正在尝试返回记录。我正在做一个 foreach 循环并将 id 设置为那些只有匹配但在我的网页中我得到的记录在两个列表中都不匹配,例如 Id 1234 在 Student 但不在教师中,但它仍在显示。

List<Student> studentEnrolled = studentreport.getStudents();
List<Teacher> teachersFacu = teacherreport.getTeachers();

for(Teacher tcReport: teachersFacu){
    for(Student stu: studentEnrolled){

        if(tcReport.getId().equals(stu.getId())){ // setting new id if there is only a match
            String ids= stu.getId();
            stu.setId(ids);

        }
    }
}

return studentEnrolled; // this is returning id even if there is no match

标签: javalist

解决方案


尝试过滤并仅返回匹配项。就像是:

List<Student> studentEnrolled = studentreport.getStudents();
List<Teacher> teachersFacu = teacherreport.getTeachers();

Set<String> teachersIds = teachersFacu.stream().map(Teacher::getId).collect(Collectors.toSet());

return studentEnrolled.stream()
                      .filter(stud -> teachersIds.contains(stud.getId()))
                      .collect(Collectors.toList());

或者,如果您想坚持使用经典的 for 循环

List<Student> studentEnrolled = studentreport.getStudents();
List<Teacher> teachersFacu = teacherreport.getTeachers();

List<Student> result = new ArrayList<>();
for(Student stu: studentEnrolled){    
   if(teachersListContainsSameId(stu.getId(), teachersFacu)){ 
        result.add(stu);
   }
}    
return result;

teachersListContainsSameId辅助方法在哪里:

boolean teachersListContainsSameId(String id, List<Teacher> list){
     for(Teacher techer: list){
        if(teacher.getId().equals(id)){
            return true;
        }
     }
    return false;
}

推荐阅读