簡體   English   中英

使用 Java 8 Stream API 根據 ID 和日期過濾對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM