Java 8 使用 Stream API 获取两个对象集合的差集
在 Java 8 中,你可以使用 Stream API 来对两个相同对象的集合进行差集操作。假设有两个相同对象的集合 List1 和 List2,它们都包含三个字段 field1、field2 和 field3,你可以按照以下步骤进行差集操作:
- 导入必要的类和方法:
import java.util.List;
import java.util.stream.Collectors;
- 定义一个自定义的对象类,包含三个字段 field1、field2 和 field3,并实现 equals() 和 hashCode() 方法:
class MyObject {
private String field1;
private String field2;
private String field3;
// 构造函数、getter 和 setter 方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObject myObject = (MyObject) o;
return Objects.equals(field1, myObject.field1) &&
Objects.equals(field2, myObject.field2) &&
Objects.equals(field3, myObject.field3);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
}
- 创建两个相同对象的集合 List1 和 List2,并添加元素:
List<MyObject> list1 = new ArrayList<>();
list1.add(new MyObject('value1', 'value2', 'value3'));
list1.add(new MyObject('value4', 'value5', 'value6'));
List<MyObject> list2 = new ArrayList<>();
list2.add(new MyObject('value1', 'value2', 'value3'));
list2.add(new MyObject('value7', 'value8', 'value9'));
- 使用 Stream API 对两个集合进行差集操作,并将结果存储在一个新的集合中:
List<MyObject> difference = list1.stream()
.filter(obj -> !list2.contains(obj))
.collect(Collectors.toList());
在上述代码中,使用 stream() 方法将 list1 转换为流,然后使用 filter() 方法过滤掉 list2 中包含的元素,最后使用 collect() 方法将结果收集到一个新的集合中。
- 打印差集结果:
difference.forEach(System.out::println);
完整的示例代码如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
class MyObject {
private String field1;
private String field2;
private String field3;
// 构造函数、getter 和 setter 方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObject myObject = (MyObject) o;
return Objects.equals(field1, myObject.field1) &&
Objects.equals(field2, myObject.field2) &&
Objects.equals(field3, myObject.field3);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
}
public class Main {
public static void main(String[] args) {
List<MyObject> list1 = new ArrayList<>();
list1.add(new MyObject('value1', 'value2', 'value3'));
list1.add(new MyObject('value4', 'value5', 'value6'));
List<MyObject> list2 = new ArrayList<>();
list2.add(new MyObject('value1', 'value2', 'value3'));
list2.add(new MyObject('value7', 'value8', 'value9'));
List<MyObject> difference = list1.stream()
.filter(obj -> !list2.contains(obj))
.collect(Collectors.toList());
difference.forEach(System.out::println);
}
}
运行上述代码,将输出差集结果:
MyObject@1d44bcfa
原文地址: https://www.cveoy.top/t/topic/lZMS 著作权归作者所有。请勿转载和采集!