繁体   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