java8 根据指定属性过滤两个list集合中相同的元素 并返回相同list集合

  • Post author:
  • Post category:java

Java8流处理方式

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

核心处理

根据姓名和年纪来进行过滤

List<String> same = allData.stream()
        .map(t -> excelData
                .stream()
                .filter(s -> Objects.nonNull(t.getName())
                        && Objects.nonNull(s.getName())
                        && Objects.equals(t.getName(), s.getName())
                        && Objects.nonNull(t.getAge())
                        && Objects.nonNull(s.getAge())
                        && Objects.equals(t.getAge(), s.getAge())
                )
                .findAny()
                .orElse(null))
        .filter(Objects::nonNull)
        .map(r->r.getRowIndex())
        .collect(Collectors.toList());

具体详见后续说明

Demo实体类

public class Demo {

    private String id;

    private String name;

    private String age;

    private String rowIndex;

    public Demo() {
    }

    public Demo(String id, String name, String age, String rowIndex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.rowIndex = rowIndex;
    }



    @Override
    public String toString() {
        return "Demo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", rowIndex='" + rowIndex + '\'' +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getRowIndex() {
        return rowIndex;
    }

    public void setRowIndex(String rowIndex) {
        this.rowIndex = rowIndex;
    }
}

测试类


```java
@Test
    void testA(){
        List<Demo> allData = Arrays.asList(
                new Demo("1", "张三","20",null),
                new Demo("2", "李四","20",null),
                new Demo("3", "王五","25",null),
                new Demo("3", "小白","26",null),
                new Demo("3", "小白","25",null),
                new Demo("4", "赵六","26",null));
        System.out.println("相同的人姓名集合:" + allData);

        List<Demo> excelData = Arrays.asList(
                new Demo( null,"张三","20","20"),
                new Demo(null,"李四","21","21"),
                new Demo( null,"小红","25","22"),
                new Demo( null,"小白","26","23"));
        System.out.println("相同的人姓名集合:" + excelData);
        
        List<String> same = allData.stream()
                .map(t -> excelData
                        .stream()
                        .filter(s -> Objects.nonNull(t.getName())
                                && Objects.nonNull(s.getName())
                                && Objects.equals(t.getName(), s.getName())

                                && Objects.nonNull(t.getAge())
                                && Objects.nonNull(s.getAge())
                                && Objects.equals(t.getAge(), s.getAge())
                        )
                        .findAny()
                        .orElse(null))
                .filter(Objects::nonNull)
                .map(r->r.getRowIndex())//如需获取重复对象,将此行进行注释,改用对象集合接收
                .collect(Collectors.toList());


        System.out.println("TheSameList集合:" + same);

版权声明:本文为weixin_44109687原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。