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());
    }
}
相关推荐
vvilkim19 分钟前
Java主流框架全解析:从企业级开发到云原生
java·运维·云原生
MZ_ZXD0011 小时前
springboot汽车租赁服务管理系统-计算机毕业设计源码58196
java·c++·spring boot·python·django·flask·php
A 计算机毕业设计-小途2 小时前
大四零基础用Vue+ElementUI一周做完化妆品推荐系统?
java·大数据·hadoop·python·spark·毕业设计·毕设
岁忧4 小时前
(nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)
java·c++·leetcode·游戏·go·深度优先
猿究院--王升7 小时前
jvm三色标记
java·jvm·算法
妮妮学代码7 小时前
c#:TCP服务端管理类
java·tcp/ip·c#
兔老大RabbitMQ7 小时前
git pull origin master失败
java·开发语言·git
探索java8 小时前
Netty Channel详解:从原理到实践
java·后端·netty
tuokuac9 小时前
maven与maven-archetype-plugin版本匹配问题
java·maven
ankleless9 小时前
Spring Boot 实战:从项目搭建到部署优化
java·spring boot·后端