📅  最后修改于: 2023-12-03 15:24:46.995000             🧑  作者: Mango
在程序开发中,有时需要将几个对象之间的共同点找出来,来进行数据的比较或分析。那么,如何找到共同点呢?本文将介绍几种方法。
遍历比较是一种常见的方法,可以将多个对象进行遍历,将他们的每一个属性值逐一比较,找到共同点。
// 假设我们有三个对象 obj1、obj2、obj3
List<Object> objs = new ArrayList<>(); // 将三个对象存入列表中
objs.add(obj1);
objs.add(obj2);
objs.add(obj3);
// 遍历获取共同属性值
for (Field field : obj1.getClass().getDeclaredFields()) {
try {
field.setAccessible(true);
Object value1 = field.get(obj1);
Object value2 = field.get(obj2);
Object value3 = field.get(obj3);
if (value1 == value2 && value1 == value3) {
// 找到共同点了
System.out.println("共同点:" + value1);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
另一种方法是利用集合交集,将多个对象的属性值存入集合中,然后用交集来找到共同点。
Set<Object> set1 = new HashSet<>();
Set<Object> set2 = new HashSet<>();
Set<Object> set3 = new HashSet<>();
// 将三个对象的属性值分别存入集合
for (Field field : obj1.getClass().getDeclaredFields()) {
try {
field.setAccessible(true);
set1.add(field.get(obj1));
set2.add(field.get(obj2));
set3.add(field.get(obj3));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
// 获取交集
Set<Object> intersectionSet = new HashSet<>(set1);
intersectionSet.retainAll(set2);
intersectionSet.retainAll(set3);
// 输出交集,即共同点
for (Object obj : intersectionSet) {
System.out.println("共同点:" + obj);
}
最后一种方法是利用反射,将多个对象的属性名存入集合中,然后用交集来找到共同点。
Set<String> fieldNames1 = new HashSet<>();
Set<String> fieldNames2 = new HashSet<>();
Set<String> fieldNames3 = new HashSet<>();
// 将三个对象的属性名存入集合
for (Field field : obj1.getClass().getDeclaredFields()) {
fieldNames1.add(field.getName());
}
for (Field field : obj2.getClass().getDeclaredFields()) {
fieldNames2.add(field.getName());
}
for (Field field : obj3.getClass().getDeclaredFields()) {
fieldNames3.add(field.getName());
}
// 获取交集
Set<String> intersectionSet = new HashSet<>(fieldNames1);
intersectionSet.retainAll(fieldNames2);
intersectionSet.retainAll(fieldNames3);
// 输出交集,即共同点
for (String fieldName : intersectionSet) {
System.out.println("共同点:" + fieldName);
}
以上三种方法均可以有效地找到多个对象之间的共同点。根据实际情况选择不同的方法即可。