在我的Java 11应用程序中,我想从存储库获取产品更新.一个产品更新有一个updateId和productIds要更新的列表.
如果没有应该更新的产品编号以进行更新updateId = X,我仍然希望写入另一个我已处理更新的表X; updateStatusRepository.setStatusProcessing(updateId)并且updateStatusRepository.setStatusProcessed(updateId)应该仍然需要这个updateId.
如果存在产品更新,则应在中进行处理ProductProcessingService.
现在,groupingBy并mapping给我一个带有null条目而不是空集的Set,这就是我之后删除所有null产品ID的原因.
List<ProductUpdate> productUpdateList = updateStatusRepository.getProductUpdates();
Map<String, Set<String>> productUpdateMap = productUpdateList
.stream()
.collect(
Collectors.groupingBy(
ProductUpdate::getUpdateId,
Collectors.mapping(ProductUpdate::getProductNo, Collectors.toSet())));
productUpdateMap.forEach(
(updateId, productIds) -> {
try {
updateStatusRepository.setStatusProcessing(updateId);
productIds.remove(null);
if(!productIds.isEmpty()) {
productProcessingService.performProcessing(Lists.newArrayList(productIds));
}
updateStatusRepository.setStatusProcessed(updateId);
} catch (Exception e) {
//
}
});
Run Code Online (Sandbox Code Playgroud)
我更喜欢是否可以以mapping这样的方式使用它,如果所有值都是直接传递空集null.
有没有办法优雅地做到这一点?