【发布时间】:2017-09-22 01:39:50
【问题描述】:
我有一个列表地图,并且想收集所有值,然后在收集的列表上进行流式传输,因此给出:-
Map<LocalDateTime, List<PublicationSession>> effectiveDatePublicationMap;
下面的作品/显示了我想用迭代做什么,但我想在流中做这一切,而不是使用迭代创建中间列表:-
List< PublicationSession> publicationsToFilter = new ArrayList<>();
for (List< PublicationSession> sessions : effectiveDatePublicationMap.values()) {
publicationsToFilter.addAll(sessions);
}
Collection< PublicationSession > wantedPublications = publicationsToFilter.stream()
.filter(pub -> PublicationStatus.valueOf(pub.getPublishStatus()) == PublicationStatus.COMPLETE)
.sorted(Comparator.comparing(PublicationSession::getCreateTime))
.collect(toMap(p -> p.getPublicationSession().getEffDateTime(), UnaryOperator.identity(), PICK_LATEST))
.values();
所以我想将列表的映射全部流式传输到一个列表中,然后在一个流中处理该子列表,而不必在两个语句中执行上述操作(即通过迭代建立列表,然后进行流式过滤/ 排序和收集。
到目前为止,我没有这样做,当我尝试流式传输/收集地图时,我遇到了编译问题。任何人都可以展示如何一步完成上述操作,而无需进行迭代然后流式传输?
【问题讨论】:
-
您希望将地图值“展平”在单个列表中。 flatmap() 可能就是您要找的。span>
标签: java collections java-stream