2つのネストされたオプションでラップされたオブジェクトをアンラップするエレガントな方法はありますか?

Geir

これらの2つのクラスを検討してください

class EmailService {
    public Optional<String> getEmailAlias(String email);
}

enum Queue {
    public static Optional<Queue> fromEmailAlias(String alias);
}

上記のメソッドの実装は質問にとって重要ではないので、簡単にするために省略しました。

私はこれをしたい:

emailService.getEmailAlias("john@done")
    .map(Queue::fromEmailAlias)
    .ifPresent(queue -> { 
        // do something with the queue instance, oh wait it's an Optional<Queue> :(
    });

ただし、queueはタイプOptional<queue>(によって返されるのと同じタイプQueue::fromEmailAlias)であるため、これは機能しません。代わりに、次のようにします。

emailService.getEmailAlias("john@done")
    .map(Queue::fromEmailAlias)
    .ifPresent(q-> { 
            q.ifPresent(queue -> {
                // do something with the queue instance
            }
    });

醜い私見の一種。

の署名の変更

public static Optional<Queue> fromEmailAlias(String alias);

public static Queue fromEmailAlias(String alias);

簡単な修正ですが、それは必要な他の場所のコードにも影響しますOptional<Queue>

このネストされたオプションをアンラップする良い方法はありますか?

マルコ・トポルニック

あなたは適用する必要がありますflatMap

emailService.getEmailAlias("john@done")
            .flatMap(Queue::fromEmailAlias)
            .ifPresent(queue -> { 

             });

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

分類Dev

アップロードされた画像(画像オブジェクト)をレンダリングしてエラーが発生しないようにするにはどうすればよいですか(オブジェクトはReactの子として有効ではありません)?

分類Dev

ピストンテクスチャまたはスプライトとして使用されるオブジェクトのコレクションを格納するためのRustの慣用的な方法は何ですか?

分類Dev

ブートストラップ選択でクリックされたオプションのアウトラインを削除する方法

分類Dev

ネストされたオプションのレルムオブジェクトをすばやくクエリする最も簡単な方法

分類Dev

エラーによってネストされた数え切れないほどのコレクションオブジェクトグループにオブジェクトを直接追加する方法-リストをコレクションに変換できません

分類Dev

ブルーマンマネージャートレイアプレットは、ペアリングされたBluetoothデバイス(接続するオプション付き)を一覧表示するべきではありませんか?

分類Dev

iOSURLSessionエラー「JSONテキストが配列またはオブジェクトで開始されておらず、フラグメントを設定できないようにするオプションがあります。」

分類Dev

任意の数のネストされたオプションタイプをアンラップするにはどうすればよいですか?

分類Dev

ネストされたオブジェクトの配列をループし、異なるマークアップをレンダリングします

分類Dev

mgoエラーを使用してシャーディングされたMongoDBにアップサートする "コレクションの更新オブジェクトには完全なシャードキーが必要です:..."

分類Dev

迅速なオプションのジェネリック型とネストされたオプションのアンラッピング

分類Dev

深くネストされたオプションチェーンと結果チェーンを照合するためのシンタックスシュガーはありますか?

分類Dev

ジェネリックスを使用して、キャストせずに共通のスーパークラスとそのコレクションを持つさまざまなクラスのオブジェクトで定義された操作を処理するにはどうすればよいですか?

分類Dev

ネストされたオプションのチェックで、リストから要素を取得します。

分類Dev

スライスされたオブジェクトでスライスされたリストのインデックスを取得するためのよりスマートな方法はありますか?

分類Dev

Scalaの暗黙的なルックアップがネストされたクラスのコンパニオンオブジェクトを無視するのはなぜですか

分類Dev

チェックされたラジアルリストオプションを取得するためのC#の効率的な方法

分類Dev

キャッチされなかった例外 'NSInternalInconsistencyException'が原因でアプリを終了しています、理由: 'インデックス0のセクションのインデックス3にオブジェクトがありません'

分類Dev

ネストされたテンプレートを使用して$ dataコンテキストオブジェクトからKnockbackCollectionObservableの基になるバックボーンコレクションを取得する方法

分類Dev

Nestアプリケーションをブートストラップできません。「TypeError:オブジェクトのプロトタイプはオブジェクトのみであるか、null:未定義である可能性があります」

分類Dev

反応 - ネイティブ "Reduxのキャッチされないエラー:アクションは、プレーンなオブジェクトでなければなりません。ボタンを押して上の非同期アクションの使用カスタムミドルウェア

分類Dev

アプリケーションの多くのクラスでアクセスおよび更新されるオブジェクトのグッドプラクティスはありますか?

分類Dev

レルムにオブジェクトのネストされたリストを追加する方法「エラー:JS値はタイプ:オブジェクトである必要があります」

分類Dev

インラインマッピングまたは複数の.ForMemberを使用せずにオートマッパーでネストされたオブジェクトをマップする方法は?

分類Dev

react-redux でこのエラーを解決する方法「エラー: アクションはプレーン オブジェクトでなければなりません。非同期アクションにはカスタム ミドルウェアを使用してください。」

分類Dev

関数型プログラミングに関するいくつかの本では、インスタンスメソッドはコンパニオンオブジェクトで定義されたバイナリ関数に委任します。その背後にある実用的な理由はありますか?

分類Dev

エラー:タイプ 'object'の異なるサポートオブジェクト '[objectObject]'が見つかりません。NgForは、配列などのIterablesへのバインドのみをサポートします。ネストされたJSON

分類Dev

オブジェクトでネストされた配列を使用する場合、プログラムでチェックボックスをオンにしても変更はレンダリングされません

Related 関連記事

  1. 1

    「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

  2. 2

    アップロードされた画像(画像オブジェクト)をレンダリングしてエラーが発生しないようにするにはどうすればよいですか(オブジェクトはReactの子として有効ではありません)?

  3. 3

    ピストンテクスチャまたはスプライトとして使用されるオブジェクトのコレクションを格納するためのRustの慣用的な方法は何ですか?

  4. 4

    ブートストラップ選択でクリックされたオプションのアウトラインを削除する方法

  5. 5

    ネストされたオプションのレルムオブジェクトをすばやくクエリする最も簡単な方法

  6. 6

    エラーによってネストされた数え切れないほどのコレクションオブジェクトグループにオブジェクトを直接追加する方法-リストをコレクションに変換できません

  7. 7

    ブルーマンマネージャートレイアプレットは、ペアリングされたBluetoothデバイス(接続するオプション付き)を一覧表示するべきではありませんか?

  8. 8

    iOSURLSessionエラー「JSONテキストが配列またはオブジェクトで開始されておらず、フラグメントを設定できないようにするオプションがあります。」

  9. 9

    任意の数のネストされたオプションタイプをアンラップするにはどうすればよいですか?

  10. 10

    ネストされたオブジェクトの配列をループし、異なるマークアップをレンダリングします

  11. 11

    mgoエラーを使用してシャーディングされたMongoDBにアップサートする "コレクションの更新オブジェクトには完全なシャードキーが必要です:..."

  12. 12

    迅速なオプションのジェネリック型とネストされたオプションのアンラッピング

  13. 13

    深くネストされたオプションチェーンと結果チェーンを照合するためのシンタックスシュガーはありますか?

  14. 14

    ジェネリックスを使用して、キャストせずに共通のスーパークラスとそのコレクションを持つさまざまなクラスのオブジェクトで定義された操作を処理するにはどうすればよいですか?

  15. 15

    ネストされたオプションのチェックで、リストから要素を取得します。

  16. 16

    スライスされたオブジェクトでスライスされたリストのインデックスを取得するためのよりスマートな方法はありますか?

  17. 17

    Scalaの暗黙的なルックアップがネストされたクラスのコンパニオンオブジェクトを無視するのはなぜですか

  18. 18

    チェックされたラジアルリストオプションを取得するためのC#の効率的な方法

  19. 19

    キャッチされなかった例外 'NSInternalInconsistencyException'が原因でアプリを終了しています、理由: 'インデックス0のセクションのインデックス3にオブジェクトがありません'

  20. 20

    ネストされたテンプレートを使用して$ dataコンテキストオブジェクトからKnockbackCollectionObservableの基になるバックボーンコレクションを取得する方法

  21. 21

    Nestアプリケーションをブートストラップできません。「TypeError:オブジェクトのプロトタイプはオブジェクトのみであるか、null:未定義である可能性があります」

  22. 22

    反応 - ネイティブ "Reduxのキャッチされないエラー:アクションは、プレーンなオブジェクトでなければなりません。ボタンを押して上の非同期アクションの使用カスタムミドルウェア

  23. 23

    アプリケーションの多くのクラスでアクセスおよび更新されるオブジェクトのグッドプラクティスはありますか?

  24. 24

    レルムにオブジェクトのネストされたリストを追加する方法「エラー:JS値はタイプ:オブジェクトである必要があります」

  25. 25

    インラインマッピングまたは複数の.ForMemberを使用せずにオートマッパーでネストされたオブジェクトをマップする方法は?

  26. 26

    react-redux でこのエラーを解決する方法「エラー: アクションはプレーン オブジェクトでなければなりません。非同期アクションにはカスタム ミドルウェアを使用してください。」

  27. 27

    関数型プログラミングに関するいくつかの本では、インスタンスメソッドはコンパニオンオブジェクトで定義されたバイナリ関数に委任します。その背後にある実用的な理由はありますか?

  28. 28

    エラー:タイプ 'object'の異なるサポートオブジェクト '[objectObject]'が見つかりません。NgForは、配列などのIterablesへのバインドのみをサポートします。ネストされたJSON

  29. 29

    オブジェクトでネストされた配列を使用する場合、プログラムでチェックボックスをオンにしても変更はレンダリングされません

ホットタグ

アーカイブ