可以通过使用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);
步骤解释:
-
addAll()
方法会将传入集合的所有元素按顺序追加到目标列表末尾。 -
先添加
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());
代码解释
-
Comparator.comparingInt(LedgerRecord::getId)
通过方法引用指定排序依据的字段(这里是id
字段),并声明为int
类型(如果id
是Long
类型,需改用comparingLong
)。 -
.reversed()
如果需要降序排序,调用该方法反转比较器的顺序。 -
注意事项
-
确保
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;}