鉴于我有以下Map
并致电writeMetadata(...)
:
Map<Report, TransferStatus> transferStatusMap = sftpService.transfer(reportDeliverables);
dbMetadataWriter.writeMetadata(successReports);
ENUM
as:
public enum TransferStatus {
SUCCESS,
FAILURE
}
首先,如何使用Java 8创建状态为successReport
的所有Report
的{{1}}列表?
其次,在致电TransferStatus.SUCCESS
之前,应检查是否存在任何成功的值。
最后,总的来说,如何处理失败的转移?实际上,最佳做法是什么?
答案 0 :(得分:3)
List<Report> successReports = transferStatusMap.entrySet()
.stream()
.filter(e -> e.getValue() == TransferStatus.SUCCESS)
.map(Entry::getKey)
.collect(Collectors.toList());
if(!reports.isEmpty()){
dbMetadataWriter.writeMetadata(successReports);
}
或者您可以将它们收集到Map
:
Map<TransferStatus, List<Report>> map =
transferStatusMap.entrySet()
.stream()
.collect(Collectors.groupingBy(
Entry::getValue,
Collectors.mapping(Entry::getKey, Collectors.toList()));
答案 1 :(得分:0)
您可以将successReports列表创建为:
Map<Report, TransferStatus> transferStatusMap = sftpService.transfer(reportDeliverables);
List<Report> successReports = transferStatusMap.entrySet().stream().filter(e -> e.getValue().equals(TransferStatus.SUCCESS))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
如果地图中存在任何此类条目,则类似于writeMetaData
Map<Report, TransferStatus> transferStatusMap = sftpService.transfer(reportDeliverables);
if(transferStatusMap.entrySet().stream().anyMatch(x->x.getValue().equals(TransferStatus.SUCCESS))) {
dbMetadataWriter.writeMetadata(successReports);
}
注意 :如果这些是连续或连续的语句,{is-{({3}}更好地检查现有的数据类型。