如何在List<Map<String, Object>>中仅遍历每个Map的money值
解决仅遍历Map中
money值的问题 嘿,我来帮你搞定这个需求!首先咱们先梳理下你现有代码里的问题:你的嵌套循环逻辑走偏啦,finalMap没有初始化,other.contains(...)的判断完全不对(因为other是存Map的List,根本不会包含数字),而且putAll(child)会把整个Map的键值对都放进去,完全不符合你只取money的要求。
正确的实现方式
你要的是遍历每个Map里的money值,其实不用复杂的嵌套循环,直接通过键"money"取值就好,下面给你几种常用的实现:
方式一:普通增强for循环(适用于所有Java版本)
如果需要把所有money值收集起来,或者直接遍历处理,可以这么写:
// 初始化集合存储money值,类型根据实际情况调整(比如BigDecimal/Integer) List<Integer> moneyValues = new ArrayList<>(); for (Map<String, Object> map : other) { // 先判断Map是否包含"money"键,避免空指针或类型转换错误 if (map.containsKey("money")) { // 转换为对应类型,这里假设是Integer,实际可改为BigDecimal Integer money = (Integer) map.get("money"); moneyValues.add(money); // 如果不需要收集,直接在这里处理money即可,比如打印 // System.out.println("当前money值:" + money); } } // 后续可使用收集到的moneyValues for (Integer money : moneyValues) { System.out.println(money); }
方式二:Java 8+ Stream API(更简洁)
如果你的项目用的是Java 8及以上,用流处理会更清爽:
import java.util.stream.Collectors; // 一行代码收集所有money值 List<Integer> moneyValues = other.stream() // 过滤掉没有"money"键的Map,可选步骤 .filter(map -> map.containsKey("money")) // 获取"money"的值并转换类型 .map(map -> (Integer) map.get("money")) .collect(Collectors.toList()); // 遍历输出 moneyValues.forEach(System.out::println);
补充说明
- 注意类型转换:如果你的
money实际是BigDecimal类型,就把转换代码改成(BigDecimal) map.get("money"),避免类型转换异常。 - 如果不需要收集值,只是要遍历处理每个
money,可以直接在循环里操作,不用存到集合里。
内容的提问来源于stack exchange,提问作者user9130953
相关产品推荐
相关产品推荐

