两个相同对象的集合通过共有的三个字段取差集java8
在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
原文地址: http://www.cveoy.top/t/topic/i7pW 著作权归作者所有。请勿转载和采集!