package com.engine.salary.util; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collector; import java.util.stream.Collectors; /** * @description: 实体类相关 * @author: xiajun * @modified By: xiajun * @date: Created in 10/28/21 5:36 PM * @version:v1.0 */ public class SalaryEntityUtil { private static final DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); /** * 千分位格式化 * * @param originMap 原始map * @param targetMap 目标map */ public static void thousandthConvert(Map originMap, Map targetMap) { if (MapUtils.isNotEmpty(originMap)) { originMap.forEach((k, v) -> { if (StringUtils.isNotBlank(String.valueOf(v))) { targetMap.put(k, decimalFormat.format(Double.valueOf(String.valueOf(v)))); } }); } } /** * 千分位格式化 * * @param originString 原始字符串 * @return 格式化后的字符串 */ public static String thousandthConvert(String originString) { if (StringUtils.isNotBlank(originString)) { return decimalFormat.format(Double.valueOf(originString)); } return "0.00"; } /** * 判断对象或对象数组中每一个对象是否为空: 对象为null,字符序列长度为0,集合类、Map为empty * * @param obj * @return */ public static boolean isNullOrEmpty(Object obj) { if (obj == null) { return true; } if (obj instanceof CharSequence) { return ((CharSequence) obj).length() == 0; } if (obj instanceof Collection) { return ((Collection) obj).isEmpty(); } if (obj instanceof Map) { return ((Map) obj).isEmpty(); } if (obj instanceof Object[]) { Object[] object = (Object[]) obj; if (object.length == 0) { return true; } boolean empty = true; for (int i = 0; i < object.length; i++) { if (!isNullOrEmpty(object[i])) { empty = false; break; } } return empty; } return false; } public static boolean isNotNullOrEmpty(Object obj) { return !isNullOrEmpty(obj); } public static A properties(Collection objs, Function function, Collector collectors) { return objs.stream().map(function).collect(collectors); } public static Set properties(Collection objs, Function function) { if (CollectionUtils.isEmpty(objs)) { return Sets.newHashSet(); } return properties(objs, function, Collectors.toSet()); } public static Map convert2Map(Collection objs, Function function) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); } return objs.stream().collect(Collectors.toMap(function, Function.identity(), (a, b) -> a)); } public static Map convert2Map(Collection objs, Function keyMapper, Function valueMapper) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); } return objs.stream() .filter(e -> valueMapper.apply(e) != null && keyMapper.apply(e) != null) .collect(Collectors.toMap(keyMapper, valueMapper, (a, b) -> a)); } public static Map> group2Map(Collection objs, Function function) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); } return objs.stream().collect(Collectors.groupingBy(function)); } public static Map> group2Map(Collection objs, Function keyMapper, Function valueMapper) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); } return objs.stream() .filter(e -> keyMapper.apply(e) != null && valueMapper.apply(e) != null) .collect(Collectors.groupingBy(keyMapper, Collectors.collectingAndThen(Collectors.toList(), e -> e.stream().map(valueMapper).collect(Collectors.toSet())))); } public static Map> group2ListMap(Collection objs, Function keyMapper, Function valueMapper) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); } return objs.stream() .filter(e -> keyMapper.apply(e) != null && valueMapper.apply(e) != null) .collect(Collectors.groupingBy(keyMapper, Collectors.collectingAndThen(Collectors.toList(), e -> e.stream().map(valueMapper).collect(Collectors.toList())))); } /** * LinkedHashMap有序去重 * @param keyExtractor * @param * @return */ public static Predicate distinctByKey(Function keyExtractor) { LinkedHashMap map = new LinkedHashMap<>(); return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } /** * ConcurrentHashMap无序去重 * @param keyExtractor * @param * @return */ public static Predicate distinctByKeyMap(Function keyExtractor) { ConcurrentHashMap map = new ConcurrentHashMap<>(); return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } public static BigDecimal reduce(Collection objs, Function function) { if (CollectionUtils.isEmpty(objs)) { return BigDecimal.ZERO; } return objs.stream() .filter(e -> function.apply(e) != null) .map(function) .reduce(BigDecimal.ZERO, BigDecimal::add); } public static BigDecimal empty2Zero(String value) { if (StringUtils.isEmpty(value)) { return BigDecimal.ZERO; } try { return new BigDecimal(value); } catch (Exception e) { return BigDecimal.ZERO; } } public static BigDecimal carryRule(Integer newScale, Integer rententionRule, BigDecimal value) { //四舍五入 RoundingMode roundingMode = RoundingMode.HALF_UP; //向上舍入 if (Objects.equals(rententionRule, 3)) { roundingMode = RoundingMode.UP; } //向下舍入 if (Objects.equals(rententionRule, 4)) { roundingMode = RoundingMode.DOWN; } //见分取角(只取保留小数后一位向上舍入) if (Objects.equals(rententionRule, 5)) { value = value.setScale(newScale + 1, RoundingMode.FLOOR); roundingMode = RoundingMode.UP; } //向上取偶 if (Objects.equals(rententionRule, SalaryRoundingModeEnum.UP_EVEN.getValue())) { value = value.setScale(0, RoundingMode.UP); int number = value.intValue(); if (number % 2 != 0) { value = value.add(BigDecimal.valueOf(1)); } } return value.setScale(newScale, roundingMode); } /** * 两个集合是否有交集 * * @param list1 * @param list2 * @param * @return */ public static boolean judgeIntersection(List list1, List list2) { boolean flag = false; List origin = new ArrayList<>(); origin.addAll(list1); origin.retainAll(list2); if (origin.size() > 0) { flag = true; } return flag; } /** * String转Long * * @param obj * @return */ public static Long string2Long(String obj) { if (NumberUtils.isCreatable(obj)) { return Long.valueOf(obj); } return null; } /** * String转BigDecimal * * @param obj * @return */ public static BigDecimal string2BigDecimal(String obj) { if (NumberUtils.isCreatable(obj)) { return new BigDecimal(obj); } return null; } /** * String转BigDecimal * * @param obj * @return */ public static BigDecimal string2BigDecimalDefault0(String obj) { if (NumberUtils.isCreatable(obj)) { return new BigDecimal(obj); } return BigDecimal.ZERO; } /** * 判断字符串是否等于0 * * @param obj * @return */ public static boolean StringEqZERO(String obj) { if (NumberUtils.isCreatable(obj)) { return BigDecimal.ZERO.compareTo(new BigDecimal(obj)) == 0; } return false; } public static Double string2DoubleDefault0(String obj) { if (NumberUtils.isCreatable(obj)) { return new Double(obj); } return new Double("0.0"); } }