当前位置: 首页 > article >正文

Java合并两个列表到目标列表,并且进行排序

可以通过使用addAll()方法将两个列表合并到目标列表中。以下是实现代码:

java

复制

下载

List<LedgerRecord> rkRecordList = warehouseMapper.selectLedgerRkRecordByMaterialNo(materialNo);
List<LedgerRecord> ckRecordList = warehouseMapper.selectLedgerCkRecordByMaterialNo(materialNo);
List<LedgerRecord> ledgerRecordList = new ArrayList<>();// 合并两个列表到 ledgerRecordList
ledgerRecordList.addAll(rkRecordList);
ledgerRecordList.addAll(ckRecordList);

步骤解释:

  1. addAll() 方法会将传入集合的所有元素按顺序追加到目标列表末尾。

  2. 先添加 rkRecordList,再添加 ckRecordList,最终 ledgerRecordList 包含两者的所有元素。

注意事项:

  • 如果 rkRecordList 或 ckRecordList 可能为 null(例如数据库查询返回 null),需要先判空,否则会抛出 NullPointerException。改进后的安全代码如下:

    java

    复制

    下载

    if (rkRecordList != null) {ledgerRecordList.addAll(rkRecordList);
    }
    if (ckRecordList != null) {ledgerRecordList.addAll(ckRecordList);
    }
  • 合并后的列表顺序是:先 rkRecordList 的元素,后 ckRecordList 的元素。

排序

在Java中,可以通过 Comparator 对集合中的对象按属性排序。假设 LedgerRecord 类有一个 id 字段(且提供了 getId() 方法),以下是按 id 升序或降序排序的实现方法:

1. 使用 Collections.sort 实现(直接修改原列表)

java

复制

下载

// 合并后的列表 ledgerRecordList
ledgerRecordList.addAll(rkRecordList);
ledgerRecordList.addAll(ckRecordList);// 按 id 升序排序(从小到大)
Collections.sort(ledgerRecordList, Comparator.comparingInt(LedgerRecord::getId));// 如果要按 id 降序排序(从大到小)
Collections.sort(ledgerRecordList, Comparator.comparingInt(LedgerRecord::getId).reversed());

2. 使用 Stream API 实现(生成新列表)

java

复制

下载

// 合并并生成排序后的新列表(不影响原列表)
List<LedgerRecord> sortedList = ledgerRecordList.stream().sorted(Comparator.comparingInt(LedgerRecord::getId)) // 升序// .sorted(Comparator.comparingInt(LedgerRecord::getId).reversed()) // 降序.collect(Collectors.toList());

代码解释

  1. Comparator.comparingInt(LedgerRecord::getId)
    通过方法引用指定排序依据的字段(这里是 id 字段),并声明为 int 类型(如果 id 是 Long 类型,需改用 comparingLong)。

  2. .reversed()
    如果需要降序排序,调用该方法反转比较器的顺序。

  3. 注意事项

    • 确保 LedgerRecord 类有 getId() 方法(或通过其他方式访问 id)。

    • 如果 id 可能为 null,需额外处理空值(例如:.sorted(Comparator.comparing(LedgerRecord::getId, Comparator.nullsLast(Comparator.naturalOrder()))))。


完整示例

java

复制

下载

// 合并列表
List<LedgerRecord> ledgerRecordList = new ArrayList<>();
ledgerRecordList.addAll(rkRecordList);
ledgerRecordList.addAll(ckRecordList);// 按 id 升序排序
Collections.sort(ledgerRecordList, Comparator.comparingInt(LedgerRecord::getId));// 打印结果
ledgerRecordList.forEach(record -> System.out.println(record.getId()));

扩展:自定义复杂排序

如果需要多级排序(例如先按 id 升序,再按日期降序):

java

复制

下载

Comparator<LedgerRecord> complexComparator = Comparator.comparingInt(LedgerRecord::getId).thenComparing(Comparator.comparing(LedgerRecord::getDate).reversed());Collections.sort(ledgerRecordList, complexComparator);

实例代码:

@Overridepublic List<LedgerRecord> queryLedgerRecordByMaterialNo(String materialNo) {// 获取入库账册记录列表List<LedgerRecord> rkRecordList = warehouseMapper.selectLedgerRkRecordByMaterialNo(materialNo);// 获取出库账册记录列表List<LedgerRecord> ckRecordList = warehouseMapper.selectLedgerCkRecordByMaterialNo(materialNo);// 将rkRecordList和ckRecordList两个集合,合并到新的集合ledgerRecordListList<LedgerRecord> ledgerRecordList = new ArrayList<>();if (rkRecordList != null) {ledgerRecordList.addAll(rkRecordList);}if (ckRecordList != null) {ledgerRecordList.addAll(ckRecordList);}// 按 id 升序排序(从小到大)// ledgerRecordList.sort(Comparator.comparingInt(LedgerRecord::getId));// 按 id 降序排序(从大到小)ledgerRecordList.sort(Comparator.comparingInt(LedgerRecord::getId).reversed());// 返回最终列表return ledgerRecordList;}

http://www.lryc.cn/news/2383978.html

相关文章:

  • Spring AI Alibaba集成阿里云百炼大模型应用
  • 22. 用例依赖装饰器的实现思路和方法
  • 支持向量存储:PostgresSQL及pgvector扩展详细安装步骤!老工程接入RAG功能必备!
  • 【部署】如何离线环境创建docker容器执行python命令行程序
  • idea常用配置 properties中文输出乱码
  • 【Bluedroid】蓝牙 HID Host connect全流程源码解析
  • day1 大模型学习 Qwen系列学习
  • Unity3D仿星露谷物语开发47之砍树时落叶特效
  • 第十节第六部分:常见API:DateTimeFormatter、Period、Duration
  • 如何在VSCode中更换默认浏览器:完整指南
  • B2160 病人排队
  • 【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025
  • 鸿蒙进阶——CMakelist、GN语法简介及三方库通用移植指南
  • CSS-5.1 Transition 过渡
  • TTS:VITS-fast-fine-tuning 快速微调 VITS
  • 从虚拟仿真到行业实训再到具身智能--华清远见嵌入式物联网人工智能全链路教学方案
  • 告别手动绘图!2分钟用 AI 生成波士顿矩阵
  • GraphPad Prism工作表的管理
  • UE 材质几个输出向量节点
  • 【modelscope/huggingface 通过colab将huggingface 模型/数据集/空间转移到 modelscope并下载】
  • 告别静态UI!Guineration用AI打造用户专属动态界面
  • 第六届电子通讯与人工智能国际学术会议(ICECAI 2025)
  • 【C/C++】C++并发编程:std::async与std::thread深度对比
  • 每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min
  • STL中的Vector(顺序表)
  • iOS Runtime与RunLoop的对比和使用
  • 解决vscode在任务栏显示白色图标
  • 架构思维:构建高并发扣减服务_分布式无主架构
  • Vue 3 官方 Hooks 的用法与实现原理
  • Vue3 打印表格、Element Plus 打印、前端打印、表格导出打印、打印插件封装、JavaScript 打印、打印预览