java数据处理工具类

2021-07-27  本文已影响0人  斡旋_ASL
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.logging.SimpleFormatter;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static cn.fw.common.constant.CommonConstant.Symbol.COMMA;
import static cn.fw.common.constant.CommonConstant.Symbol.EMPTY;

/**
 * 公共帮助服务
 * <p>
 * create at 2020-05-27
 */
public interface CommonSupport {
    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll    集合对象
     * @param column1 列1
     * @param column2 列2
     * @return 返回键值对
     */
    default <P, R1, R2> Map<R1, List<R2>> transfersMap(Collection<P> coll, Function<P, R1> column1, Function<P, R2> column2) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column1) || Objects.isNull(column2)) {
            return Collections.emptyMap();
        }
        return coll.stream().collect(Collectors.toMap(column1,
            i -> new ArrayList<>(Collections.singletonList(column2.apply(i))), (i1, i2) -> {
                i1.addAll(i2);
                return new ArrayList<>();
            }));
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll   集合对象
     * @param column 列
     * @return 返回键值对
     */
    default <P, R> Map<R, List<P>> transfersMap(Collection<P> coll, Function<P, R> column) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column)) {
            return Collections.emptyMap();
        }
        return coll.stream().collect(Collectors.groupingBy(column));
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll   集合对象
     * @param column 列
     * @return 返回键值对
     */
    default <P, R> Map<R, P> transferMap(Collection<P> coll, Function<P, R> column) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column)) {
            return Collections.emptyMap();
        }
        return coll.stream().collect(Collectors.toMap(column, i -> i, (i1, i2) -> i1));
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll    集合对象
     * @param column1 列1
     * @param column2 列2
     * @return 返回键值对
     */
    default <P, R1, R2, R3> Map<R1, Map<R2, R3>> transferMap(Collection<P> coll, Function<P, R1> column1, Function<P, R2> column2, Function<P, R3> column3) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column1) || Objects.isNull(column2) || Objects.isNull(column3)) {
            return Collections.emptyMap();
        }
        final Map<R1, Map<R2, R3>> map = new HashMap<>();
        coll.stream().collect(Collectors.groupingBy(column1)).forEach((k, v) -> map.put(k, transferMap(v, column2, column3)));
        return map;
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll    集合对象
     * @param column1 列1
     * @param column2 列2
     * @return 返回键值对
     */
    default <P, R1, R2> Map<R1, Map<R2, P>> transferToMap(Collection<P> coll, Function<P, R1> column1, Function<P, R2> column2) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column1) || Objects.isNull(column2)) {
            return Collections.emptyMap();
        }
        final Map<R1, Map<R2, P>> map = new HashMap<>();
        coll.stream().collect(Collectors.groupingBy(column1)).forEach((k, v) -> map.put(k,
            v.stream().collect(Collectors.toMap(column2, i -> i, (i1, i2) -> i1))));
        return map;
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll    集合对象
     * @param column1 列1
     * @param column2 列2
     * @return 返回键值对
     */
    default <P, R, R1, R2, R3> Map<R1, Map<R2, R3>> transferToMap(Collection<P> coll, Function<P, List<R>> column, Function<P, R1> column1, Function<R, R2> column2, Function<R, R3> column3) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column) || Objects.isNull(column1) || Objects.isNull(column2) || Objects.isNull(column3)) {
            return Collections.emptyMap();
        }
        final Map<R1, Map<R2, R3>> map = new HashMap<>();
        coll.stream().collect(Collectors.groupingBy(column1)).forEach((k, v) -> map.put(k,
            v.stream().map(column).flatMap(Collection::parallelStream)
                .collect(Collectors.toMap(column2, column3, (i1, i2) -> i1))));
        return map;
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll    集合对象
     * @param column1 列1
     * @param column2 列2
     * @return 返回键值对
     */
    default <P, R1, R2> Map<R1, R2> transferMap(Collection<P> coll, Function<P, R1> column1, Function<P, R2> column2) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column1) || Objects.isNull(column2)) {
            return Collections.emptyMap();
        }
        return coll.stream().collect(Collectors.toMap(column1, column2, (i1, i2) -> i1));
    }

    /**
     * 将集合制定字段转Map键值对
     *
     * @param coll    集合对象
     * @param column1 列1
     * @param column2 列2
     * @return 返回键值对
     */
    default <P, R1, R2> Map<R1, R2> transferMap(Collection<P> coll, Function<P, R1> column1, Function<P, R2> column2, BinaryOperator<R2> mergeFunction) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column1) || Objects.isNull(column2)) {
            return Collections.emptyMap();
        }
        return coll.stream().collect(Collectors.toMap(column1, column2, mergeFunction));
    }

    /**
     * 将ID字符串转换为id集合
     *
     * @param ids ID集合字符串","分割
     * @return id集合
     */
    default List<Long> strToIds(String ids) {
        if (StringUtils.isBlank(ids)) {
            return Collections.emptyList();
        }
        return Arrays.stream(ids.split(COMMA))
            .filter(StringUtils::isNotBlank)
            .map(Long::valueOf)
            .distinct()
            .collect(Collectors.toList());
    }

    /**
     * 将ID字符串转换为id集合
     *
     * @param ids ID集合字符串","分割
     * @return id集合
     */
    default List<String> strToStrs(String ids) {
        if (StringUtils.isBlank(ids)) {
            return Collections.emptyList();
        }
        return Arrays.stream(ids.split(COMMA))
            .filter(StringUtils::isNotBlank)
            .distinct()
            .collect(Collectors.toList());
    }

    /**
     * 将列表固定字段ID字符串转换为id集合
     *
     * @param coll 对象集合
     * @return id集合
     */
    default <P> List<Long> strToIds(Collection<P> coll, Function<P, String> column) {
        if (CollectionUtils.isEmpty(coll)) {
            return Collections.emptyList();
        }
        return coll.stream().map(column)
            .filter(StringUtils::isNotBlank)
            .map(this::strToIds)
            .flatMap(Collection::stream)
            .collect(Collectors.toList());
    }

    /**
     * 将列表ID集合和ID名称键值对组装名称集合
     *
     * @param ids ID集合
     * @param map ID名称键值对
     * @return 名称
     */
    default String idsToNames(List<Long> ids, Map<Long, String> map) {
        if (CollectionUtils.isEmpty(ids) || CollectionUtils.isEmpty(map)) {
            return EMPTY;
        }
        return ids.stream().distinct()
            .map(i -> map.getOrDefault(i, EMPTY))
            .filter(StringUtils::isNotBlank)
            .distinct()
            .collect(Collectors.joining(COMMA));
    }

    /**
     * 获取集合制定字段集合
     *
     * @param coll 集合
     * @return 字段集合
     */
    default <P, R> List<R> collIds(Collection<P> coll, Function<P, R> column) {
        if (CollectionUtils.isEmpty(coll)) {
            return Collections.emptyList();
        }
        return coll.stream()
            .map(column)
            .distinct()
            .collect(Collectors.toList());
    }

    /**
     * 根据条件过滤集合数据
     *
     * @param coll 集合
     * @return 过滤后集合
     */
    default <P> List<P> filter(Collection<P> coll, Predicate<P> column) {
        if (CollectionUtils.isEmpty(coll)) {
            return Collections.emptyList();
        }
        return coll.stream()
            .filter(column)
            .distinct()
            .collect(Collectors.toList());
    }

    /**
     * 获取集合制定字段集合
     *
     * @param coll 集合
     * @return 字段集合
     */
    default <P, R> List<R> colls(Collection<P> coll, Function<P, List<R>> column) {
        if (CollectionUtils.isEmpty(coll)) {
            return Collections.emptyList();
        }
        return coll.stream()
            .map(column)
            .flatMap(Collection::parallelStream)
            .collect(Collectors.toList());
    }

    /**
     * 获取集合制定字段集合
     *
     * @param coll 集合
     * @return 字段集合
     */
    default <P, R> Set<R> toSets(Collection<P> coll, Function<P, R> column) {
        if (CollectionUtils.isEmpty(coll)) {
            return Collections.emptySet();
        }
        return coll.stream()
            .map(column)
            .collect(Collectors.toSet());
    }

    /**
     * 获取集合制定字段集合
     *
     * @param coll 集合
     * @return 字段集合
     */
    default <P, R1, R2> List<R2> collIds(Collection<P> coll, Function<P, List<R1>> column1, Function<R1, R2> column2) {
        if (CollectionUtils.isEmpty(coll)) {
            return Collections.emptyList();
        }
        return coll.stream()
            .map(column1)
            .flatMap(Collection::parallelStream)
            .map(column2)
            .collect(Collectors.toList());
    }

    /**
     * 将将ID集合转字符串
     *
     * @param coll 集合
     * @return 字段集合
     */
    default String idsToStr(Collection<Long> coll) {
        if (CollectionUtils.isEmpty(coll)) {
            return EMPTY;
        }
        return coll.stream()
            .map(String::valueOf)
            .distinct()
            .collect(Collectors.joining(COMMA));
    }

    /**
     * 将将ID集合转字符串
     *
     * @param coll 集合
     * @return 字段集合
     */
    default String collToStr(Collection<String> coll) {
        if (CollectionUtils.isEmpty(coll)) {
            return EMPTY;
        }
        return coll.stream()
            .map(String::valueOf)
            .distinct()
            .collect(Collectors.joining(COMMA));
    }

    /**
     * 将将ID集合转字符串
     *
     * @param coll 集合
     * @return 字段集合
     */
    default String collIdToStr(Collection<Long> coll) {
        if (CollectionUtils.isEmpty(coll)) {
            return EMPTY;
        }
        return coll.stream()
            .map(String::valueOf)
            .distinct()
            .collect(Collectors.joining(COMMA));
    }

    /**
     * 指定字段求和
     *
     * @param coll   集合
     * @param column 指定列
     * @return 求和值
     */
    default <P> Double sum(Collection<P> coll, Function<P, Number> column) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column)) {
            return 0d;
        }
        return coll.stream().map(column).mapToDouble(Number::doubleValue).sum();
    }

    /**
     * 列表指定字段求和
     *
     * @param coll    集合
     * @param column1 指定列
     * @return 求和后列表
     */
    default <P, R1> List<P> collsColumnSum(Collection<P> coll, Function<P, R1> column1, Function<List<P>, P> column2) {
        if (CollectionUtils.isEmpty(coll) || Objects.isNull(column1)) {
            return Collections.emptyList();
        }
        return coll.stream()
            .collect(Collectors.groupingBy(column1))
            .values()
            .stream().map(column2)
            .collect(Collectors.toList());
    }

    /**
     * 列表汇总
     *
     * @param lists 可变参数列表
     * @return 汇总后的列表
     */
    default <P> List<P> collSummary(List<P>... lists) {
        Stream<P> stream = Stream.empty();
        for (List<P> values : lists) {
            stream = Stream.concat(stream, values.stream());
        }
        return stream.collect(Collectors.toList());
    }

    /**
     * 时间格式化
     *
     * @param date 时间
     * @param format 格式化方式
     * @return 格式化后的字符串
     */
    default String formatDate(Date date, String format) {
        if (StringUtils.isBlank(format) || Objects.isNull(date)) {
            return "";
        }
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(date);
    }

    /**
     * 一天的开始时间
     *
     * @param date 时间
     * @return 格式化后的时间
     */
    default Date dateOfStart(Date date) {
        if (Objects.isNull(date)) {
            return null;
        }
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter1.parse(String.format("%s 00:00:00", formatter.format(date)));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 一天的结束时间
     *
     * @param date 时间
     * @return 格式化后的时间
     */
    default Date dateOfEnd(Date date) {
        if (Objects.isNull(date)) {
            return null;
        }
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter1.parse(String.format("%s 23:59:59", formatter.format(date)));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

}
上一篇下一篇

猜你喜欢

热点阅读