リスト中のマップ内の文字列のためのJava 8のネストされたヌルチェック

adbdkb:

私は以下のような文字列の配列を取得するには、ヌルの一連のチェック(ネストされたヌル・チェック)を行う必要があります

String[] test;
if(CollectionUtils.isNotEmpty(checkList)){
    if(MapUtils.isNotEmpty(checkList.get(0))){
        if(StringUtils.isNotBlank(checkList.get(0).get("filename"))){
            test = checkList.get(0).get("filename").split("_");
        }
    }
}

多分、ネストされた小切手のこれらの種類を実行するために、Java8オプションを使用して、より良い方法はありますか?私は失敗したflatmap /マップとオプションを使用しようとしました。

ジョンKugelman:

あなたは長い間の連鎖使用することができますOptionalし、Stream出力にステップにより入力ステップを変換するための操作を。このような何か(未テスト):

String[] test = Optional.ofNullable(checkList)
    .map(Collection::stream)
    .orElseGet(Stream::empty)
    .findFirst()
    .map(m -> m.get("filename"))
    .filter(f -> !f.trim().isEmpty())
    .map(f -> f.split("_"))
    .orElse(null);

私は強く使用を停止することをお勧めしたいnullリストとマップを。それは使用することが多い方が良いでしょう空のコレクションではなく、ヌルの方法は、あなたがあらゆる場所にヌルチェックをする必要はありません、コレクションを。さらに、空または空白の文字列をあなたのコレクションに許可されていません。それらを除外するかに置き換えるnullあなたは、メモリ内のオブジェクトへのユーザー入力を変換しているとすぐに、早く。あなたはへの呼び出しを挿入する必要がありますする必要はありませんtrim()し、isBlank()その場所の上にすべてのように。

あなたがに簡素化することができることをしなかった場合:

String[] test = checkList.stream()
    .findFirst()
    .map(m -> m.get("filename"))
    .map(f -> f.split("_"))
    .orElse(null);

非常に良く、ありませんか?

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=204507&siteId=1