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个数")
相关推荐
等一场春雨17 分钟前
Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
java·spring boot·分布式
customer0818 分钟前
【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
码农研究僧20 分钟前
Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
java·redis·缓存·缓存策略
落霞的思绪30 分钟前
令牌主动失效机制实现——Redis登录优化
java·redis
苏-言1 小时前
SpringMVC 实战指南:文件上传
java·后端·spring
m0_748250741 小时前
SpringMVC详解
java
nanzhuhe1 小时前
tomcat状态一直是Exited (1)
java·tomcat
m0_748241121 小时前
【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())
java·后端·spring
Kevinyu_2 小时前
Java ArrayList
java·开发语言·windows
忆源2 小时前
Linux高级--3.3.1 C++ spdlog 开源异步日志方案
java·c++·开源