常用工具类

计算当天开始时间和结束时间

java 复制代码
DateTime date = DateUtil.date();
String startDateStr = DateUtil.formatDateTime(DateUtil.beginOfDay(date));
String endDateStr = DateUtil.formatDateTime(DateUtil.beginOfDay(DateUtil.offsetDay(date,1)));
params.put("startDate",startDateStr);
params.put("endDate",endDateStr);

1-数组工具类(ArrayUtils)

java 复制代码
package com.tianji.common.utils;

import cn.hutool.core.util.ArrayUtil;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 数组工具类
 * @ClassName ArrayUtils
 **/
public class ArrayUtils extends ArrayUtil {



    /**
     * 将源数组转换成指定类型的列表
     *
     * @param originList  原始列表
     * @param targetClazz 转换后列表元素的类型
     * @param <R>         原始列表元素的类型
     * @param <T>         目标列表元素的类型
     * @return 目标类型的集合
     */
    public static <R, T> List<T> convert(R[] originList, Class<T> targetClazz) {
       return convert(originList, targetClazz, null);

    }

    /**
     * 将源数组转换成指定类型的列表
     *
     * @param originList  原始列表
     * @param targetClazz 转换后列表元素的类型
     * @param convert     转换特殊字段接口
     * @param <R>         原始列表元素的类型
     * @param <T>         目标列表元素的类型
     * @return 目标类型的集合
     */
    public static <R, T> List<T> convert(R[] originList, Class<T> targetClazz, Convert<R, T> convert) {
        if (isEmpty(originList)) {
            return null;
        }

        return Arrays.stream(originList)
                .map(origin -> BeanUtils.copyBean(origin, targetClazz, convert))
                .collect(Collectors.toList());

    }
}

2-AspectUtils

java 复制代码
package com.tianji.common.utils;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;

import java.lang.reflect.Method;

public class AspectUtils {

    /**
     * 获取被拦截方法对象
     * MethodSignature.getMethod() 获取的是顶层接口或者父类的方法对象
     * 所以应该使用反射获取当前对象的方法对象
     */
    public static Method getMethod(ProceedingJoinPoint pjp) {
        //获取参数的类型
        Signature sig = pjp.getSignature();
        if (sig instanceof MethodSignature) {
            MethodSignature methodSignature = (MethodSignature) sig;
            return methodSignature.getMethod();
        } else {
            throw new IllegalArgumentException("It's not method");
        }
    }

    /**
     * 在aop切面中SPEL表达式对formatter进行格式化,
     * 转换出指定的值
     *
     * @param formatter
     * @param method
     * @param args
     * @return
     */
    public static String parse(String formatter, Method method, Object[] args) {
        LocalVariableTableParameterNameDiscoverer nameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
        return SPELUtils.parse(formatter, nameDiscoverer.getParameterNames(method), args);
    }
}

3-断言工具类

java 复制代码
package com.tianji.common.utils;


import com.tianji.common.constants.ErrorInfo;
import com.tianji.common.exceptions.BadRequestException;

import java.util.Map;

public class AssertUtils {
    public static void equals(Object obj1, Object obj2, String ... message){
        if (obj1 == null || obj2 == null) {
            handleException(message);
            return;
        }
        if (obj1 == obj2) {
            return;
        }
        if(!obj1.equals(obj2)){
            handleException(message);
        }
    }
    public static void isNotNull(Object obj, String ... message){
        if (obj == null) {
            handleException(message);
        }
    }

    public static void isNotBlank(String str, String ... message){
        if (StringUtils.isBlank(str)) {
            handleException(message);
        }
    }

    public static void isTrue(Boolean boo, String... message) {
        if (BooleanUtils.isFalse(boo)) {
            handleException(message);
        }
    }

    public static void isFalse(Boolean boo, String... message) {
        if (BooleanUtils.isTrue(boo)) {
            handleException(message);
        }
    }

    private static void handleException(String ... message){
        String msg = ErrorInfo.Msg.REQUEST_PARAM_ILLEGAL;
        if(message != null && message.length > 0){
            msg = message[0];
        }
        throw new BadRequestException(msg);
    }

    public static void isNotEmpty(Iterable<?> coll, String ... message) {
        if(CollUtils.isEmpty(coll)){
            handleException(message);
        }
    }
    public static void isNotEmpty(Map<?, ?> map, String ... message) {
        if(CollUtils.isEmpty(map)){
            handleException(message);
        }
    }
}

4-BeanUtils

java 复制代码
package com.tianji.common.utils;

import cn.hutool.core.bean.BeanUtil;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 继承自 hutool 的BeanUtil,增加了bean转换时自定义转换器的功能
 */
public class BeanUtils extends BeanUtil {

    /**
     * 将原对象转换成目标对象,对于字段不匹配的字段可以使用转换器处理
     *
     * @param source  原对象
     * @param clazz   目标对象的class
     * @param convert 转换器
     * @param <R>     原对象类型
     * @param <T>     目标对象类型
     * @return 目标对象
     */
    public static <R, T> T copyBean(R source, Class<T> clazz, Convert<R, T> convert) {
        T target = copyBean(source, clazz);
        if (convert != null) {
            convert.convert(source, target);
        }
        return target;
    }
    /**
     * 将原对象转换成目标对象,对于字段不匹配的字段可以使用转换器处理
     *
     * @param source  原对象
     * @param clazz   目标对象的class
     * @param <R>     原对象类型
     * @param <T>     目标对象类型
     * @return 目标对象
     */
    public static <R, T> T copyBean(R source, Class<T> clazz){
        if (source == null) {
            return null;
        }
        return toBean(source, clazz);
    }

    public static <R, T> List<T> copyList(List<R> list, Class<T> clazz) {
        if (list == null || list.size() == 0) {
            return CollUtils.emptyList();
        }
        return copyToList(list, clazz);
    }

    public static <R, T> List<T> copyList(List<R> list, Class<T> clazz, Convert<R, T> convert) {
        if (list == null || list.size() == 0) {
            return CollUtils.emptyList();
        }
        return list.stream().map(r -> copyBean(r, clazz, convert)).collect(Collectors.toList());
    }
}
相关推荐
leikooo2 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
Ivanqhz3 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
沙漠之主3 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
FPGA小徐3 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
YOLO数据集集合4 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
知行EDI4 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
笑鸿的学习笔记4 小时前
C++笔记之大块顺序写
java·c++·笔记
打工仔折腾 AI4 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
殷色玫瑰5 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
青山木7 小时前
Hot 100 --- 编辑距离
java·数据结构·算法·leetcode·动态规划