前提・実現したいこと
java8を使用して、Optionalの値が存在する場合、Oprionalの値がnullの場合の処理を分岐させたい。
該当のソースコード
java
1List<String> filePaths = 「いくつかのファイルパス文字列」; 2Optional<String> targetFilePath = filePaths.stream().filter(path -> path.contain("hoge")).findFirst(); 3if(!tfFileOpt.isPresent()) { 4 // 処理対象のファイルが取得できなかった場合 5 // 例えば 6 // 1. ログ出力 7 // 2. DBのユーザステータスをエラーに更新。 8 // 3. throw new BusinessException(); // 上位層へ業務処理が失敗したことを通達 9} 10 11// 以下、対象ファイルが取得できた場合。 12// 例えば 13// 1. 対象ファイルの読み込み。 ここで、targetFilePath.get()を使う? 14// 2. 読み込んだファイルの中身を解析&業務処理。 15// 3. etc... ...
この処理がよろしくないっぽいことはわかるのですが、どうすればいいかわかりません。皆さんどうするものなのでしょうか?
よろしくないと思っている点。
・Optionalを取得して、わざわざisPresent()で値のあるなしを判定している。→ nullチェックやってるのと変わらないから、Optionlの思想(?)に反している。
※ ググるとOptional取得して、if(optional.isParent){ ... } は論外。と書かれていることが多かったので。
・正常業務で、値を使いたいときいちいちOptionlにget()をかけるのが微妙。かと言って、isPresent()で判定した後、正常処理の最初に、ローカル変数に入れるのも微妙。そもそも、Optionalを取得する流れの中で、getElse()とかで取得したり、nullの場合の処理も記述できないの?
・仮に、Optionalを取得する流れの中で値があるなら取得する、ない場合は処理を行うのができた場合、ない場合の処理はラムダ式(?)で書くことになるが、その中でログを出したりDB操作することに違和感がある。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。