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

如何从RecyclerView获取数据并完成金额汇总与用户支付统计?

RecyclerView费用展示

看你的需求,是要对RecyclerView里的费用数据做两个统计:一是把所有total amount加起来算总和,二是按用户分组,把每个人的amount paid累加起来。刚好你给出了部分代码,咱们一步步来实现:

第一步:处理字符串转数值

因为你的数据都是字符串类型,直接相加肯定不行,得先转成数值类型。这里写个工具方法来处理转换,还能避免格式错误的异常:

// 把字符串转成int,处理可能的格式错误
private int convertStringToInt(String str) {
    try {
        // 先去掉前后空格,防止字符串里有多余空格导致转换失败
        return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        e.printStackTrace();
        // 如果转换失败,默认返回0,你也可以根据需求改成其他值
        return 0;
    }
}

如果你的金额带小数,把int改成double,Integer.parseInt换成Double.parseDouble就行,逻辑完全一致。

第二步:统计所有total amount的总和

遍历你的data列表,把每个item的total amount累加即可:

int totalAmountTotal = 0;
for (int i = 0; i < data.size(); i++) {
    // 假设你的数据模型类有getTotalAmount()方法获取total amount字符串
    String totalStr = data.get(i).getTotalAmount();
    totalAmountTotal += convertStringToInt(totalStr);
}
System.out.println("所有total amount总和:" + totalAmountTotal);

第三步:按用户统计已支付金额总和

这里用HashMap来分组,key存用户名,value存该用户的已支付累计金额,遍历数据时不断更新这个map:

HashMap<String, Integer> userPaidMap = new HashMap<>();
for (int i = 0; i < data.size(); i++) {
    ExpenseItem item = data.get(i); // 假设你的数据模型类叫ExpenseItem
    String userName = item.getUserName().trim(); // 去掉用户名前后空格
    int paidAmount = convertStringToInt(item.getAmountPaid());
    
    // 用getOrDefault简化判断逻辑:如果用户已存在就累加,不存在就初始化
    userPaidMap.put(userName, userPaidMap.getOrDefault(userName, 0) + paidAmount);
}

// 遍历map输出你要的结果
for (Map.Entry<String, Integer> entry : userPaidMap.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

整合到你的现有代码里

把上面的逻辑加到你提供的CALCULATONADAP.java代码中,最终代码如下:

calcuationAdap = new CalcuationAdap(Calculation.this,data);

// 初始化统计变量
int totalAmountTotal = 0;
HashMap<String, Integer> userPaidMap = new HashMap<>();

for (int i = 0 ;i<data.size();i++) {
    System.out.println(data.get(i).getItem());
    ExpenseItem item = data.get(i);
    
    // 统计total amount总和
    totalAmountTotal += convertStringToInt(item.getTotalAmount());
    
    // 统计用户已支付金额
    String userName = item.getUserName().trim();
    int paidAmount = convertStringToInt(item.getAmountPaid());
    userPaidMap.put(userName, userPaidMap.getOrDefault(userName, 0) + paidAmount);
}

// 输出统计结果
System.out.println("所有total amount总和:" + totalAmountTotal);
for (Map.Entry<String, Integer> entry : userPaidMap.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

recyclerView.setAdapter(calcuationAdap);
calcuationAdap.notifyDataSetChanged();

// 工具方法要放在类里
private int convertStringToInt(String str) {
    try {
        return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return 0;
    }
}

这样运行之后,就能得到你预期的结果:

Gulati ji : 50
Amen : 55
Sadaf : 65


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:05:38