简体   繁体   English

在要初始化列表的映射中查找枚举值

[英]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所有ReportsuccessReport列表?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM