[英]Compare two Lists of different object types based on matching property in java 8
我有兩個類型的列表:
class User {
Long userId;
String userName;
Long workflowStatusId;
}
class WorkflowStatus {
Long workflowStatusId;
String workflowStatusName;
Long userId;
}
每個用戶對象都有 workflowStatusId。 同樣,每個 WorkflowStatus 都有與之關聯的 userId。 我首先保存User
,這給了我List<User> users
,其中每個對象的workflowStatusId
設置為 null 。 現在,對於用戶中的每個用戶,我正在WorkflowStatus
中創建新條目,這給了我List<WorkflowStatus> workflowStatuses
。 現在我想在我之前保存的User
對象中設置這些新插入的workflowStatusId
,所以我試圖在兩者中匹配userId
屬性,並希望在找到匹配項后設置這個workflowStatusId
。 我正在嘗試做類似的事情:
List<User> filteredList = users
.stream()
.filter(user -> workflowStatuses
.stream()
.allMatch(user.getUserId().equals(workflowStatus.getUserId())))
.map(how to set workflowStatusId in user? can i do something like user->user.setWorkflowStatusId((workflowStatus.getWorkflowStatusId)))
.collect(Collectors.toList());
嘗試找到一些解決方案,如果可以使用Java 8 streams
。 基於java 8中的一些共同屬性比較不同對象類型的兩個列表的更好方法是什么?
在 Stream 中間設置屬性等副作用不是一個好主意。 更好的解決方案是只創建用戶實例的 Map:
Map<Long, User> usersById =
users.stream().collect(Collectors.toMap(User::getUserId, u -> u));
現在您可以簡單地遍歷您的 WorkflowStatus 對象:
for (WorkflowStatus status : workflowStatuses) {
Long userId = status.getUserId();
Long statusId = status.getWorkflowStatusId();
usersById.get(userId).setWorkflowStatusId(statusId);
}
<User> filteredList = users.stream().filter(user -> workflowStatuses
.stream()
.allMatch(user.getUserId().equals(workflowStatus.getWorkflowStatusId)))
.map(how to set workflowStatusId in user? can i do something like user->user.setWorkflowStatusId((workflowStatus.getWorkflowStatusId)))
.collect(Collectors.toList());
在此生成 java 8 上的 Lamba 表達式循環
workflowStatus.foreach( data ) -> { user.setworkflowStatusId(data.getWorkflowStatusId);user.setuserId(data.getuserId);}
或在下面簡單替換
<User> filteredList = users.stream().filter(user -> workflowStatuses
.stream()
.allMatch(user.getUserId().equals(workflowStatus.getWorkflowStatusId)))
.map(workflowStatus.foreach( data ) -> { user.setworkflowStatusId(data.getWorkflowStatusId);user.setuserId(data.getuserId)})
.collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.