两个集合比较取出某个集合中不同的部分
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); } }
术到极致,几近于道。
有道无术,可以求术;
有术无道,止于术矣。