我需要根據創建的日期欄位將序列號添加到物件串列中 代碼是用 Java 11 撰寫的。我有一個類似下面的串列
public class UserInformation {
private String userSeqNumber;
private String userDepartment;
private Date createdDate;
}
我可以按創建日期對串列進行排序,但同時我需要根據創建日期按升序添加 userSequenceNumber。我在這里嘗試了一個混亂的代碼,有人可以幫助我。
userInformations.stream()
.filter(c-> c.getUserDepartment().equalsIgnoreCase(request.getUserDepartment()))
.sorted(Comparator.comparing(UserInformation::getCreatedDate))
.forEach(f -> f.setUserSeqNumber());
所以輸出應該是每個部門的,序列號應該根據使用創建日期的條目數遞增。
UserInformation:[{"1","IT",01-01-2022}, {"2","IT",01-02-2022},{"1","OPS",01-01-2022}, {"2,"OPS",01-02-2022}]
uj5u.com熱心網友回復:
可能是我不明白這個問題,因為您的代碼示例參考了未知欄位(referringDepartment
,referralSeqNumber
)和未知類(SIUInformation
),但我猜這可能是您或多或少需要的?
userInformations.stream()
.collect(Collectors.groupingBy(UserInformation::getUserDepartment))
.values()
.forEach(listForDepartment -> {
AtomicInteger x = new AtomicInteger(1);
listForDepartment.stream()
.sorted(Comparator.comparing(UserInformation::getCreatedDate))
.forEachOrdered(item -> item.setUserSeqNumber(String.valueOf(x.getAndIncrement())));
});
首先,您UserInformation
按部門對物件進行分組(結果為Map<String List<UserInformation>
),然后回圈該操作創建的 Map 中的值。然后使用 createdDate 對值進行排序sorted()
(日期比較器默認為升序),然后根據元素的順序開始填寫 userSeqNumber,地圖中每個部門從 1 重新開始。
請注意,我使用forEachOrdered
而不是forEach
因為我明確想要記錄順序很重要,即使在這種情況下,如果forEach
使用它也不會破壞代碼。
uj5u.com熱心網友回復:
流不跟蹤它們已處理的專案數。實作您想要的最簡單的方法是分兩部分進行。
List<UserInformation> sorted = userInformations.stream()
.filter(c-> c.getReferringDepartment().equalsIgnoreCase(referralReq.getReferringDepartment()))
.sorted(Comparator.comparing(SIUInformation::getCreatedDate))
.collect(Collectors.toList());
IntStream.range(0, sorted.size()).forEach(i -> sorted.get(i).setReferralSeqNumber(i));
uj5u.com熱心網友回復:
在全部排序之前,您無法真正設定序列號。所以imo,使用流沒有多大意義。根據現有資訊,我將執行以下操作:
userInformation.sort(Comparator
.comparing(UserInformation::getCreatedDate));
// now assign the ids.
int id = 1;
for(UserInformation user : userInformation) {
user.setUserSeqNumber(id "");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427520.html