我希望数据库记录列表是 groupby orderId 并按 itemDate 排序。
我以任何顺序从数据库中获取记录。相同的 OrderId 的记录会以不同的顺序出现。
OrderId Item Number Item Date
1 12345 3/10/21
2 67890 4/10/21
1 12345 3/11/21 -> duplicate. so take least date of Item 12345
1 23456 3/11/21 -> don't remove this one as itemnumb is unique
3 33441 5/10/21
2 67890 4/11/21 -> duplicate. so take least date 4/10/21 record
2 12333 4/11/21
3 33441 5/11/21 -> duplicate. so take least date 5/10/21 record
3 45321 5/11/21
我只需要首先返回按最少项目日期排序的最高记录。不需要相同订单 ID 的第二条记录。
POJO
public class ItemDetail {
private String orderId;
private String itemNumber;
private Date itemDate;
//setter/getters
}
DAO层会返回itemDetails列表,即List itemDetails;
从 itemDetails 列表中,我必须在地图中设置键值,如下面的代码,
我需要将键存储为字符串中的 OrderId-ItemNumber 组合,值存储为 ItemDetail 对象
public List<ItemDetail> getItemDetails(List<ItemDetail> itemDetails) {
Map<String, ItemDetail> itemMap = itemDetails.stream()
.collect(Collectors.groupingBy(itemDetail -> itemDetail.getOrderId()))
.values()
.stream()
.collect(Collectors.toMap(itemDetail -> itemDetail.getOrderId() +"-"+ itemDetail.getItemNumber(),
itemDetail -> itemDetail));
return mapValueAsItemDetailList;
}
最后地图应该只返回这样的记录
OrderId Item Number Item Date
1 12345 3/10/21
1 23456 3/11/21
2 67890 4/10/21
2 12333 4/11/21
3 33441 5/10/21
3 45321 5/11/21
简单来说,我需要按 orderId-itemNumber 分组,按项目日期排序,只返回最少日期记录。不要删除相同订单编号的唯一商品编号记录。如何在 Java 8 中做到这一点?
录一张。12345 不是唯一的。所以删除最高日期的第二条记录。需要保留唯一记录并按项目日期删除重复项。
1 12345 3/10/21
1 12345 3/11/21
1 23456 3/11/21
所以只有我想将密钥保留为 orderId-itemNumber