在地图中查找枚举值以初始化列表

时间:2017-10-03 10:46:23

标签: java enums java-8 maps

鉴于我有以下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之前,应检查是否存在任何成功的值。

最后,总的来说,如何处理失败的转移?实际上,最佳做法是什么?

2 个答案:

答案 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}}更好地检查现有的数据类型。