[英]Lookup enum value in a map to initialise list
Given I have the following Map
and call to writeMetadata(...)
: 鉴于我有以下
Map
并调用writeMetadata(...)
:
Map<Report, TransferStatus> transferStatusMap = sftpService.transfer(reportDeliverables);
dbMetadataWriter.writeMetadata(successReports);
ENUM
as: ENUM
为:
public enum TransferStatus {
SUCCESS,
FAILURE
}
Firstly, how can I create the successReport
list with all Report
with status TransferStatus.SUCCESS
with Java 8? 首先,如何在Java 8中创建状态为
TransferStatus.SUCCESS
所有Report
的successReport
列表?
Secondly, before call to dbMetadataWriter.writeMetadata(successReports);
其次,在调用
dbMetadataWriter.writeMetadata(successReports);
there should be a check to see if any values with success exist. 应该检查一下是否存在成功的值。
and finally, in general how should failed transfers be handled? 最后,一般来说,应该如何处理失败的转帐? Practically, what is best practice?
实际上,什么是最佳实践?
List<Report> successReports = transferStatusMap.entrySet()
.stream()
.filter(e -> e.getValue() == TransferStatus.SUCCESS)
.map(Entry::getKey)
.collect(Collectors.toList());
if(!reports.isEmpty()){
dbMetadataWriter.writeMetadata(successReports);
}
Or you could collect them both to a Map
: 或者,您可以将它们都收集到
Map
:
Map<TransferStatus, List<Report>> map =
transferStatusMap.entrySet()
.stream()
.collect(Collectors.groupingBy(
Entry::getValue,
Collectors.mapping(Entry::getKey, Collectors.toList()));
You can create the list of successReports as: 您可以按以下方式创建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());
Similarily writeMetaData if any such entry in the map exists 类似地,如果映射中存在任何此类条目,则将写入writeMetaData
Map<Report, TransferStatus> transferStatusMap = sftpService.transfer(reportDeliverables);
if(transferStatusMap.entrySet().stream().anyMatch(x->x.getValue().equals(TransferStatus.SUCCESS))) {
dbMetadataWriter.writeMetadata(successReports);
}
Note : If these are consecutive or sequential statements, @Eugene's solution is better in doing isEmpty() check over the existing datatype. 注意 :如果这些是连续或连续的语句, @ Eugene的解决方案最好对现有数据类型进行isEmpty()检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.