鉴于此源数据:
{ "_id" : ObjectId("1"), "productID" : 1, "amount" : 1, "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("2"), "productID" : 2, "amount" : 2, "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("3"), "productID" : 3, "amount" : 3, "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("4"), "productID" : 4, "amount" : 4, "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("5"), "productID" : 1, "amount" : 11, "date" : ISODate("2017-02-02T00:00:00Z") }
{ "_id" : ObjectId("6"), "productID" : 2, "amount" : …Run Code Online (Sandbox Code Playgroud) 我有一个列表地图,并希望收集所有的值,然后在收集的列表上流,所以给出: -
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)
因此,我想将列表的映射全部流式传输到一个列表中,然后在一个流中处理该子列表,而不是必须在两个语句中执行上述操作(即通过迭代构建列表,然后执行流式处理以过滤/排序和搜集.
到目前为止我没有这样做,当我尝试流式/收集地图时,我得到编译问题.任何人都可以一步显示如何执行上述操作,而无需进行迭代然后流式传输?