Use Java 8 Stream API to filter objects based on an ID and Date(使用 Java 8 Stream API 根据 ID 和日期过滤对象)
问题描述
我有一个 Contact 类,每个实例都有一个唯一的 contactId.
I have a Contact class, for which each instance has a unique contactId.
public class Contact {
private Long contactId;
... other variables, getters, setters, etc ...
}
还有一个 Log 类,详细说明 Contact 在某个 lastUpdated 日期执行的 action.
And a Log class that details an action performed by a Contact on a certain lastUpdated date.
public class Log {
private Contact contact;
private Date lastUpdated;
private String action;
... other variables, getters, setters, etc ...
}
现在,在我的代码中,我有一个 List<Log>,它可以包含单个 Contact 的多个 Log 实例.我想根据 Log代码>对象.结果列表应包含每个 Contact 的最新 Log 实例.
Now, in my code I have a List<Log> that can contain multiple Log instances for a single Contact. I would like to filter the list to include only one Log instance for each Contact, based on the lastUpdated variable in the Log object. The resulting list should contain the newest Log instance for each Contact.
我可以通过创建一个 Map,然后循环并获取具有最大 lastUpdated<的 Log 实例来做到这一点/code> 变量用于每个 Contact,但这似乎可以使用 Java 8 Stream API 更简单地完成.
I could do this by creating a Map<Contact, List<Log>>, then looping through and getting the Log instance with max lastUpdated variable for each Contact, but this seems like it could be done much simpler with the Java 8 Stream API.
如何使用 Java 8 Stream API 实现这一点?
How would one accomplish this using the Java 8 Stream API?
推荐答案
你可以链接多个收集器来得到你想要的:
You can chain several collectors to get what you want:
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 8 Stream API 根据 ID 和日期过滤对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Java 8 Stream API 根据 ID 和日期过滤对象
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 获取数字的最后一位 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 转换 ldap 日期 2022-01-01
