sub*_*123 2 java collections java-stream
我有一个列表地图,并希望收集所有的值,然后在收集的列表上流,所以给出: -
Map<LocalDateTime, List<PublicationSession>> effectiveDatePublicationMap;
Run Code Online (Sandbox Code Playgroud)
下面的工作/显示我想用迭代做什么,但我想在流中完成所有操作,而不是使用迭代创建一个中间列表: -
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();
Run Code Online (Sandbox Code Playgroud)
因此,我想将列表的映射全部流式传输到一个列表中,然后在一个流中处理该子列表,而不是必须在两个语句中执行上述操作(即通过迭代构建列表,然后执行流式处理以过滤/排序和搜集.
到目前为止我没有这样做,当我尝试流式/收集地图时,我得到编译问题.任何人都可以一步显示如何执行上述操作,而无需进行迭代然后流式传输?
看起来你需要的只是flatMap原始Map的值,然后像你现在一样继续处理:
Collection< PublicationSession > wantedPublications =
effectiveDatePublicationMap.values() // Collection<List<PublicationSession>>
.stream() // Stream<List<PublicationSession>>
.flatMap(list->list.stream()) // Stream<PublicationSession>
.filter(pub -> PublicationStatus.valueOf(pub.getPublishStatus()) == PublicationStatus.COMPLETE)
.sorted(Comparator.comparing(PublicationSession::getCreateTime))
.collect(toMap(p -> p.getPublicationSession().getEffDateTime(), UnaryOperator.identity(), PICK_LATEST))
.values();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3516 次 |
| 最近记录: |