You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Spring中对接口返回JSON的指定对象及数组字段求和实现

实现代码

这里提供两种常用实现方案,根据业务场景选择即可:

方案1:使用BigDecimal计算(推荐,适用于金额类场景,无精度丢失)

import java.math.BigDecimal;
import java.util.Optional;

// 1. 计算ResponA的SumA值
BigDecimal sumA = new BigDecimal(Optional.ofNullable(respon.getBody().ResponA().SumA()).orElse("0"));

// 2. 累加Respon B数组所有元素的SumB值
BigDecimal sumBTotal = respon.getBody().ResponB().stream()
        .map(item -> new BigDecimal(Optional.ofNullable(item.SumB()).orElse("0")))
        .reduce(BigDecimal.ZERO, BigDecimal::add);

// 3. 累加ResponC数组所有元素的SumC值
BigDecimal sumCTotal = respon.getBody().ResponC().stream()
        .map(item -> new BigDecimal(Optional.ofNullable(item.SumC()).orElse("0")))
        .reduce(BigDecimal.ZERO, BigDecimal::add);

// 4. 计算三者总和
BigDecimal total = sumA.add(sumBTotal).add(sumCTotal);

// 可根据需要转成其他类型,比如转字符串输出:
String totalStr = total.toString();

方案2:使用整型计算(适用于确定所有值为整数且数值无溢出的场景)

// 1. 计算ResponA的SumA值
int sumA = Integer.parseInt(respon.getBody().ResponA().SumA());

// 2. 累加Respon B数组所有元素的SumB值
int sumBTotal = 0;
for (var bItem : respon.getBody().ResponB()) {
    sumBTotal += Integer.parseInt(bItem.SumB());
}

// 3. 累加ResponC数组所有元素的SumC值
int sumCTotal = 0;
for (var cItem : respon.getBody().ResponC()) {
    sumCTotal += Integer.parseInt(cItem.SumC());
}

// 4. 计算三者总和
int total = sumA + sumBTotal + sumCTotal;

注意事项

  • 所有返回的金额字段都是字符串类型,必须先转成数值类型再做累加,否则会变成字符串拼接
  • 方案1中加入了Optional判空逻辑,如果业务上确定返回值一定不为空,可以去掉Optional部分简化代码
  • 如果数值较大超过int范围,可以把int替换为long类型

内容的提问来源于stack exchange,提问作者lass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:06:03