Java 8 lambda null检查用法

时间:2016-07-04 17:20:39

标签: java lambda java-8 optional

我有一个场景,我在一个类中检查多个属性进行null检查。如果它不为null,我调用一个方法,它将创建一个新对象,我需要捕获这个实例对一个引用。我是成功地能够使用地图进行空检查,但无法编写代码,这将有助于我在调用后捕获返回对象。有人可以帮忙吗?

    private WorkflowPreference buildWfPrefDetails(CcarReportPreferenceConfig ccarReportPreferenceConfig) {
    WorkflowPreference workflowPreference = new WorkflowPreference();
    List<PayloadEntry> payLoadEntries = new ArrayList<PayloadEntry>();
    Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getRwpRole)
        .map(RwpRole::getRoleName)
        .ifPresent(s -> workflowPreference.setKey(s));
    Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSequenceNumber)
        .ifPresent(s -> buildPayLoadEntry("SEQ_NUM", s));
    Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSlaType)
        .ifPresent(s -> buildPayLoadEntry("SLA_TYPE", s));
    Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSlaValue)
        .ifPresent(s -> buildPayLoadEntry("SLA_VALUE", s.toString()));
    Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getRejectSequence)
        .ifPresent(s -> buildPayLoadEntry("REJECT_SEQUENCE", s));
    Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getRaiseQueryNotification)
        .ifPresent(s -> buildPayLoadEntry("RAISE_QUERY_NOTIFICATION", s));
    workflowPreference.getValue().addAll(payLoadEntries);
    return workflowPreference;
}

private PayloadEntry buildPayLoadEntry(String key, String value) {
    PayloadEntry payloadEntry = new PayloadEntry();
    payloadEntry.setKey(key);
    payloadEntry.setValue(value);
    return payloadEntry;
}

预计现在:

payloadEntries列表应该在每次buildPayloadEntry调用之后捕获返回的对象。我想要实现类似下面的内容以及lambda null检查

payLoadEntries.add(buildPayLoadEntry("SEQ_NUM", ccarReportPreferenceConfig.getSequenceNumber()));
payLoadEntries.add(buildPayLoadEntry("SLA_TYPE", ccarReportPreferenceConfig.getSlaValue().toString()));

根据以下建议更新答案

Optional.ofNullable(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getRwpRole)
        .map(RwpRole::getRoleName)
        .ifPresent(s -> workflowPreference.setKey(s));
    Optional.ofNullable(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSequenceNumber)
        .ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SEQ_NUM", s)));
    Optional.ofNullable(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSlaType)
        .ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SLA_TYPE", s)));
    Optional.ofNullable(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSlaValue)
        .ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SLA_VALUE", s.toString())));
    Optional.ofNullable(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getRejectSequence)
        .ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("REJECT_SEQUENCE", s)));
    Optional.ofNullable(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getRaiseQueryNotification)
        .ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("RAISE_QUERY_NOTIFICATION", s)));
    workflowPreference.getValue().addAll(payLoadEntries);

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你只需转换(例如):

Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSequenceNumber)
        .ifPresent(s -> buildPayLoadEntry("SEQ_NUM", s));

Optional.of(ccarReportPreferenceConfig)
        .map(CcarReportPreferenceConfig::getSequenceNumber)
        .ifPresent(s -> payLoadEntries.add(buildPayLoadEntry("SEQ_NUM", s)));