List<Bean> List<Map>计算某个字段的合计

1. List<Bean

java 复制代码
   public static <T> BigDecimal summary(List<T> list, Function<T, BigDecimal> getFieldFunction) {
        Optional<List<T>> optionalList = Optional.ofNullable(list);

        return optionalList.map(lst -> lst.stream()
                        .filter(Objects::nonNull) // 过滤掉空对象
                        .map(getFieldFunction)
                        .filter(Objects::nonNull) // 过滤掉提取的BigDecimal值为空的情况
                        .reduce(BigDecimal.ZERO, BigDecimal::add))
                .orElse(BigDecimal.ZERO);
    }

用法

java 复制代码
        BigDecimal collectServiceFee = ListUtils.summary(temuFinanceData, TemuFinanceData::getCollectServiceFee);

2.List<Map

java 复制代码
    /**
     * 汇总某个字段的值
     * @param list
     * @param type
     * @return
     */
    public static BigDecimal summary(List<Map<String, Object>> list, String type) {
        BigDecimal result = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(list)) {
            result = new BigDecimal(list.stream().mapToDouble(v -> v.get(type) != null ? Double.parseDouble(v.get(type).toString()) : 0).sum());
        }
        return result;
    }

用法

java 复制代码
ListUtils.summary(result, "主SKU个数")
相关推荐
江沉晚呤时1 分钟前
EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
java·开发语言·数据库
考虑考虑3 分钟前
JDK17中的Sealed Classes
java·后端·java ee
写bug写bug18 分钟前
深入理解Unsafe类
java·后端
星垣矩阵架构师26 分钟前
六.架构设计之存储高性能——缓存
java·spring·缓存
刃神太酷啦34 分钟前
聚焦 string:C++ 文本处理的核心利器--《Hello C++ Wrold!》(10)--(C/C++)
java·c语言·c++·qt·算法·leetcode·github
TeamDev41 分钟前
在 Java 应用中构建双向数据保护
java·前端框架·全栈
天天摸鱼的java工程师42 分钟前
Spring 事务传播机制你了解吗?事务嵌套时你遇到过什么坑?
java·后端·面试
日月星辰Ace43 分钟前
Java JVM 浅显理解
java·jvm
用户984089050872444 分钟前
Java集合 ArrayList 多线程下报错ArrayIndexOutOfBoundsException
java
小巫程序Demo日记44 分钟前
SparkUI依赖问题解决方法
java·spark