[英]Use Java 8 Stream API to filter objects based on an ID and Date
我有一個Contact
類,每個實例都有一個唯一的contactId
。
public class Contact {
private Long contactId;
... other variables, getters, setters, etc ...
}
還有一個Log
類,它詳細說明了Contact
在某個lastUpdated
日期執行的action
。
public class Log {
private Contact contact;
private Date lastUpdated;
private String action;
... other variables, getters, setters, etc ...
}
現在,在我的代碼中,我有一個List<Log>
,它可以包含單個Contact
多個Log
實例。 我想根據Log
對象中的lastUpdated
變量過濾列表,以只為每個Contact
包含一個Log
實例。 結果列表應包含每個Contact
的最新Log
實例。
我可以通過創建一個Map<Contact, List<Log>>
來做到這一點,然后循環並獲取每個Contact
具有 max lastUpdated
變量的Log
實例,但這似乎可以使用 Java 8 Stream API 更簡單地完成。
如何使用 Java 8 Stream API 實現這一目標?
您可以鏈接多個收集器以獲得您想要的:
import static java.util.stream.Collectors.*;
List<Log> list = ...
Map<Contact, Log> logs = list.stream()
.collect(groupingBy(Log::getContact,
collectingAndThen(maxBy(Comparator.comparing(Log::getLastUpdated)), Optional::get)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.