gpt4 book ai didi

java - 使用 Java 8 Stream API 根据 ID 和日期过滤对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:24:18 24 4
gpt4 key购买 nike

我有一个 Contact类,每个实例都有一个唯一的 contactId .

public class Contact {
private Long contactId;

... other variables, getters, setters, etc ...
}

还有一个 Log详细说明 action 的类由 Contact 执行在某个lastUpdated日期。

public class Log {
private Contact contact;
private Date lastUpdated;
private String action;

... other variables, getters, setters, etc ...
}

现在,在我的代码中我有一个 List<Log>可以包含多个 Log单个 Contact 的实例.我想过滤列表以仅包含一个 Log每个实例 Contact , 基于 lastUpdated Log 中的变量目的。结果列表应包含最新的 Log每个实例 Contact .

我可以通过创建 Map<Contact, List<Log>> 来做到这一点, 然后循环并得到 Log最大值为 lastUpdated 的实例每个 Contact 的变量,但这似乎可以使用 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)));

关于java - 使用 Java 8 Stream API 根据 ID 和日期过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com