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