使用Java 8 Stream API根据ID和日期过滤对象
我有一个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
,它可以包含一个Contact
多个Log
实例。 我想根据Log
对象中的lastUpdated
变量过滤列表,为每个Contact
只包含一个Log
实例。 结果列表应包含每个Contact
的最新Log
实例。
我可以通过创建Map<Contact, List>
,然后循环并获取每个Contact
max lastUpdated
变量的Log
实例来实现这一点,但这似乎可以通过Java 8 Stream API更简单地完成。
如何使用Java 8 Stream API实现这一目标?
您可以链接几个collections家以获得您想要的东西:
import static java.util.stream.Collectors.*; List list = ... Map logs = list.stream() .collect(groupingBy(Log::getContact, collectingAndThen(maxBy(Comparator.comparing(Log::getLastUpdated)), Optional::get)));