java8判断两个集合中是否有相同的元素

比如这样一个需求,现有一个Teacher对象集合和一个Student对象集合,需要查出两个集合中姓名相同的记录该怎么办呢,通常我们想到的肯定是用双层for循环来做,如果用java8新特性lambda表达式怎么做呢?废话不多说,直接看示例:

新建老师类:

package demo;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 老师类
 */
@Data
@AllArgsConstructor
public class Teacher {
    private Long id;
    private String name;
}

新建学生类:

package demo;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 学生类
 */
@Data
@AllArgsConstructor
public class Student {
    private Long id;
    private String name;
}

测试代码:

package demo;

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);
    }
}

测试结果:
java8判断两个集合中是否有相同的元素_第1张图片

你可能感兴趣的:(java8)