两个集合比较取出某个集合中不同的部分

package com.testDemo.test;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

class SomeObject {
    private String property;

    public SomeObject(String property) {
        this.property = property;
    }

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        this.property = property;
    }

    @Override
    public String toString() {
        return "SomeObject{" +
                "property='" + property + '\'' +
                '}';
    }
}

class Main {
    public static void main(String[] args) {
        // 创建集合a
        List<SomeObject> a = new ArrayList<>();
        a.add(new SomeObject("apple"));
        a.add(new SomeObject("banana"));
        a.add(new SomeObject("orange"));

        // 创建集合b
        List<SomeObject> b = new ArrayList<>();
        b.add(new SomeObject("apple"));
        b.add(new SomeObject("grape"));
        b.add(new SomeObject("orange"));
        b.add(new SomeObject("kiwi"));

        // 将集合a中的对象属性映射为一个Map,便于快速查找
        Map<String, SomeObject> aMap = a.stream()
                .collect(Collectors.toMap(SomeObject::getProperty, obj -> obj));

        // 使用Stream和lambda表达式找出集合b中与集合a中属性不同的对象
        List<SomeObject> differentObjectsInB = b.stream()
                .filter(objB -> !aMap.containsKey(objB.getProperty()))
                .collect(Collectors.toList());

        // 输出结果
        System.out.println("集合b中与集合a中属性不同的对象:");
        differentObjectsInB.forEach(System.out::println);
    }
}

 

posted @ 2024-06-18 13:12  张载zz  阅读(1)  评论(0编辑  收藏  举报