2016-07-04 10 views
0

私はクラスnull check.Ifのための私は新しいオブジェクトを作成するメソッドを呼び出すと、このインスタンスをキャプチャする必要が呼び出すクラスの複数の属性をチェックしているシナリオがあります私はsuccesasfullyマップを使用してnullのチェックを行うことができますが、呼び出し後に戻りオブジェクトをキャプチャするのに役立つコードを書くことができませんでした。誰かが助けてください?Java 8ラムダ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; 
} 

今期待:各buildPayloadEntry call.Iはラムダヌルチェックと一緒に実装される以下のようなもの

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

ごとに更新回答を希望した後

payloadEntriesリストが返されたオブジェクトをキャプチャする必要があります以下の提案

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

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

どうやら、あなたはすでに 'map'操作の存在を知り。ですから、なぜあなたは 'ifPresent'を代わりに使うのかは不明です。しかし、大きな疑問は、あなたが潜在的に「null」になると思われるものは何ですか? – Holger

+4

'Objects.requireNonNull(ref)'を見てください。これはrefがnullでない場合はrefを評価し、そうであればthrowします。前提条件のチェックを容易にすることを目的としていました。 –

答えて

1

正しく、あなただけの(例えば)変換する必要があります。

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

'Optional.ofNullable'を' Optional.of'にすることをお勧めします。後者は引数がnullでないと仮定しますが、前者はnullを 'Optional.empty()'に変換します。 – Jubobs

+3

@Jubobs no。 ccarReportPreferenceConfigがnullではないと思われる場合は、間違った結果を静かに返すのではなく、NPEに間違いを通知してコードをすばやく失敗させます。 –

+0

@JBNizetこの場合は、細かい処理を行わずに返されます。オブジェクトがnullの場合は何も起こりたくありません。 – Balaji

関連する問題