private Completable inflatePublishers(Iterable<DeviceAccess> deviceAccesss, DeviceAccessQuery query) {
// Return as complete if publisher is not a requested field
if (query.getInflationPolicy() == null || !query.getInflationPolicy().hasChildField(DeviceAccessQuery.PUBLISHER_FIELD)) {
return Completable.complete();
}
Multimap<Long, DeviceAccess> deviceAccesssByPublisherId = HashMultimap.create();
return Observable.fromIterable(deviceAccesss)
// Filter out publisher sessions with no publisher
.filter((deviceAccess) -> deviceAccess.getPublisher() != null && deviceAccess.getPublisher().getId() != null)
// Collect all of the publisher sessions and their publisher IDs into a map
.collectInto(deviceAccesssByPublisherId, (map, deviceAccess) -> map.put(deviceAccess.getPublisher().getId(), deviceAccess))
// Fetch all of the publishers for those publisher IDs
.flatMapObservable((map) -> map.keySet().isEmpty()? Observable.empty() : publisherFacade.filter(new PublisherQuery().ids(map.keySet())))
// For each publisher returned, map it to each publisher session that had its ID
.flatMapCompletable((publisher) ->
Observable.fromIterable(deviceAccesssByPublisherId.get(publisher.getId()))
.flatMapCompletable((deviceAccess) ->
Completable.fromAction(() -> deviceAccess.setPublisher(publisher))
)
);
}
DeviceAccessFacadeImpl.java 文件源码
java
阅读 28
收藏 0
点赞 0
评论 0
项目:wayf-cloud
作者:
评论列表
文章目录