📜  如何找到共同点?(1)

📅  最后修改于: 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);
}

以上三种方法均可以有效地找到多个对象之间的共同点。根据实际情况选择不同的方法即可。