MyUtil


package com.zkml.common.util;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import java.math.BigDecimal;
import java.util.*;

/**
 * @Description : 自定义工具类(逐步完善)
 * @Author :Unknow
 * @Time :2018-04-20
 */
public final class MyUtil {

    /**
     * 判断是否为空
     *
     * @param value
     * @return
     */
    public static boolean isBlank(Object value) {
        return isObjectBlank(value);
    }

    /**
     * 判断是否不为空
     *
     * @param value
     * @return
     */
    public static boolean isNotBlank(Object value) {
        return !isObjectBlank(value);
    }

    /**
     * 将list中的标示抽出来组装成map,方便数据组装  Map<Object,Object>
     *
     * @param list
     * @param id
     * @return
     */
    public static Map listToMap(List list, String id) {
        Map map = Maps.newHashMap();
        for (int i = 0; i < list.size(); i++) {
            Object object = list.get(i);
            Object value = ReflectUtil.getMethod(id, object);
            if (isNotBlank(value))
                map.put(value, object);
        }
        return map;
    }

    /**
     * 将list中的标示抽出来组装成map,方便数据组装(有多个数据有相同标示,则组装成list)  Map<Object,List>
     *
     * @param list
     * @param id
     * @return
     */
    public static Map listToMapList(List list, String id) {
        Map<Object, List> map = Maps.newHashMap();
        for (int i = 0; i < list.size(); i++) {
            Object object = list.get(i);
            Object value = ReflectUtil.getMethod(id, object);
            if (isNotBlank(value)) {
                List paramsList = null;
                if (map.containsKey(value)) {
                    paramsList = map.get(value);
                } else {
                    paramsList = Lists.newArrayList();
                }
                paramsList.add(object);
                map.put(value, paramsList);
            }
        }
        return map;
    }

    /**
     * list对象里面抽调某一个属性单独组装成list
     *
     * @param list
     * @param fieldName
     * @return
     */
    public static List listByField(List list, String fieldName) {
        List result = Lists.newArrayList();
        for (int i = 0; i < list.size(); i++) {
            Object ob = list.get(i);
            Object value = ReflectUtil.getMethod(fieldName, ob);
            if (isNotBlank(value) && !result.contains(value))
                result.add(value);
        }
        return result;
    }

    /**
     * 获取枚举中的name集合
     *
     * @param baseEnums
     * @return
     */
    public static List<String> getEnumNameList(Enum[] baseEnums) {
        List<String> list = Lists.newArrayList();
        for (Enum baseEnumTem : baseEnums) {
            list.add(ReflectUtil.getMethod("name", baseEnumTem).toString());
        }
        return list;
    }

    /**
     * 获取枚举中的value集合
     *
     * @param baseEnums
     * @return
     */
    public static List<String> getEnumValueList(Enum[] baseEnums) {
        List<String> list = Lists.newArrayList();
        for (Enum baseEnumTem : baseEnums) {
            list.add(ReflectUtil.getMethod("value", baseEnumTem).toString());
        }
        return list;
    }

    /**
     * 小数点后保留length位小数(默认是2位)
     *
     * @param digits null 或 数值
     * @param length 小数后保留位数 默认为2位
     * @return BigDecimal
     */
    public static BigDecimal translateDigits(Object digits, Integer length) {
        if (isBlank(digits)) {
            return new BigDecimal("0.00");
        }
        if (isBlank(length) || length < 0) {
            length = 2;
        }
        return new BigDecimal(digits.toString()).setScale(length, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * BigDecimal数据智能切割成只包含有效数字,仅能处理小数点后2为数字
     * 例:1、传入0.00,处理后返回0 ;2、传入0.20则返回0.2;3、传入20则返回20
     *
     * @param digits null 或 数值
     * @return String 处理后的数字字符串
     */
    public static String cutSignificantDigits(BigDecimal digits) {
        if (isBlank(digits)) {
            return "0";
        }
        // 转换成字符串
        String digitsStr = digits.toString();
        if (!digitsStr.contains(".")) {
            return digitsStr;
        }
        // 切割成“.”前后字符串
        String[] digitsStrArray = digitsStr.split("\\.");
        // 获取小数点后的数字尾部去O后剩余部分
        digitsStrArray[1] = endsWithNonzero(digitsStrArray[1]);
        if ("".equals(digitsStrArray[1])) {
            return digitsStrArray[0];
        }
        // 重组数字,不以0结尾
        return digitsStrArray[0] + "." + digitsStrArray[1];
    }

    /**
     * 判断数字是否大于0
     *
     * @param object
     * @return boolean true,不为空或者0
     */
    public static boolean isDigitsExceedZero(Object object) {
        //如果为空,则返回false
        if (MyUtil.isBlank(object)) {
            return false;
        }
        try {
            BigDecimal digits = new BigDecimal(object.toString());
            //如果比对大于0,返回true
            if (digits.compareTo(new BigDecimal(0)) > 0) {
                return true;
            }
        } catch (RuntimeException r) {
            throw new RuntimeException("不合法的数字类型");
        }
        return false;
    }

    /**
     * 小数点后的数字,截取成绝对不以0结尾
     *
     * @param digitsStr 小数点后的数字
     * @return
     */
    private static String endsWithNonzero(String digitsStr) {
        if (digitsStr.length() == 1 && "0".equals(digitsStr)) {
            return "";
        }
        if ("0".equals(digitsStr.substring(digitsStr.length() - 1, digitsStr.length()))) {
            return endsWithNonzero(digitsStr.substring(0, digitsStr.length() - 1));
        }
        return digitsStr;
    }

    /**
     * 对象判空
     *
     * @param ob 对象
     * @return true=空 / false=非空
     */
    private static boolean isObjectBlank(Object ob) {
        if (ob == null) {
            return true;
        }
        if (ob instanceof Collection) {
            return ((Collection) ob).isEmpty();
        }
        if (ob instanceof Map) {
            return ((Map) ob).isEmpty();
        }
        if (ob.toString().trim().equals("") || ob.toString().trim().toLowerCase().equals("null")) {
            return true;
        }
        return false;
    }
}


posted @ 2020-07-13 20:45  荭丶尘  阅读(76)  评论(0编辑  收藏  举报