list中删除另一个list中相同属性值
1. list中添加元素
原生方法,需要多行 List<Teacher> teacherList = new ArrayList(); teacherList .add(teacher1); teacherList .add(teacher2); 单行方法有 1. Arrays.asList(T... a) //添加元素,list不能remove元素,否则报错 java.util.ConcurrentModificationException 2. ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray); 3. ArrayList<String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray); 4. Arrays.stream(T[] array).collect(Collectors.toList());
2. 测试list移除元素
两个实体类
@AllArgsConstructor @NoArgsConstructor @Data public class Student { private String studentId; private String studentName; } @AllArgsConstructor @NoArgsConstructor @Data public class Teacher { private Integer id; private String teacherName; private String studentId; }
测试代码
@Test void name3() { Student student1 = new Student("001", "张三"); Student student2 = new Student("002", "李四"); Student student3 = new Student("003", "王五"); List<Student> studentList = Arrays.stream(new Student[]{ student1, student2, student3}).collect(Collectors.toList()); Teacher teacher1 = new Teacher(1, "张三老师", "001"); Teacher teacher2 = new Teacher(2, "王五老师", "003"); List<Teacher> teacherList = Arrays.stream(new Teacher[]{ teacher1, teacher2}).collect(Collectors.toList()); //把学生列表中的老师排除 studentList.removeIf(student -> teacherList.stream().anyMatch(teacher -> teacher.getStudentId().equals(student.getStudentId()))); System.out.println(studentList); // [Student(studentId=002, studentName=李四)] // 这种方式创建List,移除时报错 java.util.ConcurrentModificationException //List<Student> studentList = Arrays.asList(student1, student2, student3); // List<Teacher> teacherList = Arrays.asList(teacher1, teacher2); // for (Student student : studentList) { // for (Teacher teacher : teacherList) { // if(teacher.getStudentId().equals(student.getStudentId())){ // studentList.remove(student); // } // } // } } //使用迭代器 list.remove()可以移除元素 Iterator<Student> studentIterator = studentList.iterator(); while (studentIterator.hasNext()){ Student student = studentIterator.next(); for (Teacher teacher : teacherList) { if(teacher.getStudentId().equals(student.getStudentId())){ studentIterator.remove(); } } }