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

如何按caseNumber拆分Messages对象列表为多个子列表?

按caseNumber分组Messages列表的实现方案

你可以通过一次SQL查询+内存分组的方式实现需求,避免多次调用SQL影响效率,下面提供两种可行的实现方式:

方式一:手动遍历+HashMap分组

用HashMap<Integer, List<Messages>>存储分组结果,key为caseNumber,value为对应编号的消息列表。遍历所有消息时,检查当前caseNumber是否已存在于Map中,不存在则创建新列表,再将当前消息加入对应列表即可。

示例代码:

// 初始化分组容器
Map<Integer, List<Messages>> groupedMessages = new HashMap<>();

for(Messages m : allMessages) {
    int caseNum = m.getCaseNumber();
    // 如果当前caseNumber还没有对应的列表,创建新列表
    if (!groupedMessages.containsKey(caseNum)) {
        groupedMessages.put(caseNum, new ArrayList<>());
    }
    // 将当前消息加入对应列表
    groupedMessages.get(caseNum).add(m);
}

// 获取所有分组后的子列表集合
Collection<List<Messages>> subLists = groupedMessages.values();
// 或者转成List<List<Messages>>格式
List<List<Messages>> resultList = new ArrayList<>(groupedMessages.values());

方式二:Java 8+ Stream API分组(更简洁)

利用Stream的Collectors.groupingBy方法可以一行完成分组,代码更简洁易读:

示例代码:

// 直接按caseNumber分组,返回Map<Integer, List<Messages>>
Map<Integer, List<Messages>> groupedMessages = allMessages.stream()
    .collect(Collectors.groupingBy(Messages::getCaseNumber));

// 转成子列表的集合
List<List<Messages>> resultList = new ArrayList<>(groupedMessages.values());

注意事项

  • 两种方式都只需要执行一次getAllMessages()的SQL查询,避免了多次数据库交互,效率更高。
  • 原代码中Messages类的private int caseNumber = 0语句末尾缺少分号,建议补上避免编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:35:14