如何从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
相关产品推荐
相关产品推荐

