java找出两个List集合的重复项
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;
}
}