You need to enable JavaScript to run this app. 对CityCrime类型ArrayList排序并按州累加机动车盗窃数的实现求助
优惠活动
大模型
产品
解决方案
定价
更多

对CityCrime类型ArrayList排序并按州累加机动车盗窃数的实现求助

州维度机动车盗窃数统计实现方案

前置说明

假设你的CityCrime类已经实现了两个取值方法:

  • getState():返回对应城市所属州的缩写字符串
  • getMotorTheft():返回对应城市的机动车盗窃数值(int类型)
    所有实现基于你已经读取完成的公共静态变量ArrayList<CityCrime> crimes编写。

实现步骤

1. 按州分组累加总盗窃数

使用HashMap做分组统计,代码如下:

// 初始化存储映射:key为州名,value为对应州总机动车盗窃数
Map<String, Integer> stateTheftSum = new HashMap<>();

for (CityCrime cityData : crimes) {
    String state = cityData.getState();
    int currentTheft = cityData.getMotorTheft();
    // 累加逻辑:州已存在则叠加当前值,不存在则初始化为当前值
    stateTheftSum.put(state, stateTheftSum.getOrDefault(state, 0) + currentTheft);
}

JDK8及以上版本也可以用Stream简化写法:

Map<String, Integer> stateTheftSum = crimes.stream()
    .collect(Collectors.toMap(
        CityCrime::getState,
        CityCrime::getMotorTheft,
        Integer::sum
    ));

2. 按州名字母排序并输出

// 提取所有州名并按字母升序排序
List<String> sortedStates = new ArrayList<>(stateTheftSum.keySet());
Collections.sort(sortedStates);

// 按要求格式输出
for (String state : sortedStates) {
    System.out.println(state + " " + stateTheftSum.get(state));
}

Stream简化写法:

stateTheftSum.keySet().stream()
    .sorted()
    .forEach(state -> System.out.printf("%s %d%n", state, stateTheftSum.get(state)));

常见问题排查

如果结果不符合预期,优先检查以下几点:

  • 确认getMotorTheft()返回的是机动车盗窃字段,没有错拿其他犯罪类型的数值
  • 确认州名字段没有多余空格、大小写不一致的问题,如有可以在存入map时统一处理,例如改为state.trim().toUpperCase()
  • 确认crimes列表没有重复存入数据,避免重复累加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:57:03