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());
    }
}
相关推荐
handsome_sai1 小时前
【Java 线程池】记录
java
大学生资源网2 小时前
基于springboot的唐史文化管理系统的设计与实现源码(java毕业设计源码+文档)
java·spring boot·课程设计
guslegend2 小时前
SpringSecurity源码剖析
java
roman_日积跬步-终至千里3 小时前
【人工智能导论】02-搜索-高级搜索策略探索篇:从约束满足到博弈搜索
java·前端·人工智能
大学生资源网3 小时前
java毕业设计之儿童福利院管理系统的设计与实现(源码+)
java·开发语言·spring boot·mysql·毕业设计·源码·课程设计
JasmineWr3 小时前
JVM栈空间的使用和优化
java·开发语言
Hello.Reader3 小时前
Flink SQL DELETE 语句批模式行级删除、连接器能力要求与实战避坑(含 Java 示例)
java·sql·flink
爱笑的眼睛113 小时前
从 Seq2Seq 到 Transformer++:深度解构与自构建现代机器翻译核心组件
java·人工智能·python·ai
Spring AI学习4 小时前
Spring AI深度解析(10/50):多模态应用开发实战
java·spring·ai
qq_12498707536 小时前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计