java工具--对象比较和对象集合去重(重复的保留一个)

java 复制代码
package com.zhongma.people.car.fitting.tool;

import com.zhongma.people.car.fitting.bean.FittingResult;
import com.zhongma.people.car.fitting.core.BeanStore;
import org.springframework.util.ObjectUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author konglcwqy
 * @description 对象工具类
 * @date 2023/8/21 10:05
 */
public class BeanTool {

    /**
     * 功能描述:对象属性值比较
     *
     * @param me
     * @param target
     * @param fields
     * @return boolean
     * @author konglcwqy
     * @date 2023/8/21 10:07
     */
    public static <T> boolean equal(T me, T target, String... fields) throws Exception {
        if (fields == null || fields.length == 0) {
            throw new Exception("field is null");
        }
        List<String> list = Arrays.asList(fields);
        Field[] declaredFields = me.getClass().getDeclaredFields();
        if (declaredFields == null || declaredFields.length == 0) {
            return true;
        }
        Object me_value = null;
        Object target_value = null;
        for (Field declaredField : declaredFields) {
            if (list.contains(declaredField.getName())) {
                declaredField.setAccessible(true);
                me_value = declaredField.get(me);
                target_value = declaredField.get(target);
                if (!ObjectUtils.nullSafeEquals(me_value, target_value)) {
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 功能描述:集合去重
     *
     * @param list
     * @param fields
     * @return java.util.List<T>
     * @author konglcwqy
     * @date 2023/8/21 10:33
     */
    public static <T> List<T> beanListDistinct(List<T> list, String... fields) throws Exception {
        List<T> result = new ArrayList<T>();
        Iterator<T> iterator = null;
        boolean flag = false;
        T me;
        out:
        for (T target : list) {
            iterator = result.iterator();
            inner:
            while (iterator.hasNext()) {
                me = iterator.next();
                if (equal(me, target, fields)) {
                    continue out;
                }
            }
            result.add(target);
        }
        return result;
    }

    public static void main(String[] args) throws Exception {
        FittingResult fittingResult1 = new FittingResult("1", 1, "a", 100, BeanStore.WEAK_BING);
        FittingResult fittingResult2 = new FittingResult("1", 1, "a", 100, BeanStore.WEAK_BING);
        FittingResult fittingResult3 = new FittingResult("1", 1, "a", 100, BeanStore.WEAK_BING);
        FittingResult fittingResult4 = new FittingResult("1", 1, "a", 100, BeanStore.WEAK_BING);

        FittingResult fittingResult5 = new FittingResult("1", 1, "b", 90, BeanStore.WEAK_BING);
        FittingResult fittingResult6 = new FittingResult("1", 1, "b", 90, BeanStore.WEAK_BING);
        FittingResult fittingResult7 = new FittingResult("1", 1, "b", 90, BeanStore.WEAK_BING);
        FittingResult fittingResult8 = new FittingResult("1", 1, "b", 90, BeanStore.WEAK_BING);

        List<FittingResult> list = new ArrayList<FittingResult>();
        list.add(fittingResult1);
        list.add(fittingResult2);
        list.add(fittingResult3);
        list.add(fittingResult4);
        list.add(fittingResult5);
        list.add(fittingResult6);
        list.add(fittingResult7);
        list.add(fittingResult8);

        list = beanListDistinct(list, "eventId", "eventType", "carNum");

        System.out.println(list.size());
    }
}
相关推荐
DKunYu1 天前
3.负载均衡-LoadBalance
java·运维·spring cloud·微服务·负载均衡
第二只羽毛1 天前
外卖订餐管理系统
java·大数据·开发语言·算法
毕设源码-赖学姐1 天前
【开题答辩全过程】以 高校篮球社团管理系统 为例,包含答辩的问题和答案
java·eclipse
挫折常伴左右1 天前
初学HTML2
java·开发语言
invicinble1 天前
java--se数据处理
java·开发语言
第二只羽毛1 天前
图书管理系统项目PPT文稿
java·大数据·开发语言·ide
爱笑的眼睛111 天前
超越 `assert`:深入 Pytest 的高级测试哲学与实践
java·人工智能·python·ai
爱笑的眼睛111 天前
超越静态图表:Bokeh可视化API的实时数据流与交互式应用开发深度解析
java·人工智能·python·ai
懂AI的老郑1 天前
深入理解C++中的堆栈:从数据结构到应用实践
java·数据结构·c++
音符犹如代码1 天前
深入解析 Apollo:微服务时代的配置管理利器
java·分布式·后端·微服务·中间件·架构