我有一个Contact类,每个实例都有一个唯一的contactId.
public class Contact {
private Long contactId;
... other variables, getters, setters, etc ...
}
还有一个Log类,详细说明了联系人在某个lastUpdated日期执行的操作.
public class Log {
private Contact contact;
private Date lastUpdated;
private String action;
... other variables, getters, setters, etc ...
}
现在,在我的代码中,我有一个List< Log>可以包含单个联系人的多个日志实例.我想根据Log对象中的lastUpdated变量过滤列表,为每个Contact只包含一个Log实例.结果列表应包含每个联系人的最新Log实例.
我可以通过创建Map< Contact,List< Log>>,然后循环并获取每个Contact的max lastUpdated变量的Log实例来实现这一点,但这似乎可以通过Java 8 Stream API更简单地完成.
如何使用Java 8 Stream API实现这一目标?
解决方法:
你可以链接几个收藏家来获得你想要的东西:
import static java.util.stream.Collectors.*;
List list = ...
Map logs = list.stream()
.collect(groupingBy(Log::getContact,
collectingAndThen(maxBy(Comparator.comparing(Log::getLastUpdated)), Optional::get)));
标签:java,java-8,java-stream
来源: https://codeday.me/bug/20190823/1695078.html