java - 从自定义列表中删除项目
问题描述
我有两个自定义 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
解决方案
尝试过滤并仅返回匹配项。就像是:
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;
}
推荐阅读
- python-3.x - 为什么嵌套列表嵌套更深,行尾只有一个逗号
- numpy - 在 NumPy 中计算 2D FFT
- git - 使用 VSCode 轻松删除多个跟踪文件并将它们添加到 gitignore
- spartacus-storefront - 不同减速机的角度相同状态
- vbscript - 当全屏应用程序在其上方时,VBS 是否可以发送密钥?
- python - Tkinter 按钮检查条目
- javascript - 如何在 SignalR Core JS 客户端中添加连接请求标头?
- angular - Angular + Tesseract.js(和 opencv.js)
- kubernetes - kubectl 尝试创建 CertificateSigningRequest 错误:来自服务器的错误(BadRequest):创建“tcsr.yaml”时出错:CertificateSigningRequest
- python - 来自外部的OpenCV函数while循环