java找出两个List集合的重复项

时间:2024-10-20 06:54:46
package Basic.list; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; public class Java8Test { public static void main(String[] args) { // 老师集合 List<Teacher> teachers = Arrays.asList( new Teacher(1L, "张三"), new Teacher(2L, "李四"), new Teacher(3L, "王五"), new Teacher(4L, "赵六")); // 学生集合 List<Student> students = Arrays.asList( new Student(5L, "张三"), new Student(6L, "李四"), new Student(7L, "小红"), new Student(8L, "小明")); // 求同时出现在老师集合和学生集合中的人数,name相同即视为同一个人 int size = teachers.stream() .map(t -> students.stream() .filter(s -> Objects.nonNull(t.getName()) && Objects.nonNull(s.getName()) && Objects.equals(t.getName(), s.getName())) .findAny() .orElse(null)) .filter(Objects::nonNull) .collect(Collectors.toList()) .size(); // 求同时出现在老师集合和学生集合中人的name集合,name相同即视为同一个人 List<String> names = teachers.stream() .map(t -> students.stream() .filter(s -> Objects.nonNull(t.getName()) && Objects.nonNull(s.getName()) && Objects.equals(t.getName(), s.getName())) .findAny() .orElse(null)) .filter(Objects::nonNull) .map(r -> r.getName()) .collect(Collectors.toList()); System.out.println("相同的人数:" + size); System.out.println("相同的人姓名集合:" + names); } } class Student{ long id; String name; public Student(long id, String name) { this.id = id; this.name = name; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Teacher{ long id; String name; public Teacher(long id, String name) { this.id = id; this.name = name; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }