使用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

回到顶部