使用Java 8 Stream API根据ID和日期过滤对象
我有一个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
实例获取具有max
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 8 Stream API根据ID和日期过滤对象 的全部内容, 来源链接: utcz.com/qa/432538.html