Help us understand the problem. What is going on with this article?

業務で役立ったJava No.1 Optional.ifPresentを使った時の戻り値

More than 1 year has passed since last update.

業務でJavaを書いていると何度も悩まされるのがnullチェックです。
でもいちいちStringUtilやCollectionUtilでチェックするのもめんどくさい
そもそも人が作ったインターフェースでnullが返ってくるかわからない。
なんて事ありますよね。。。

スムーズにかっこよく書きたいけどいまいち挙動が理解できなくてつまるところがあったので共有します。

(自分の実力不足なだけかもしれないですが)

Optionalで詰まったところ

Optional型のリストを受け取って特定の条件の時にOKだったりエラーコードを返したい。
普通にifを使えばいいんだけど、Optionalで受けちゃってるし、isPresentは御法度らしいのでうまいやり方はないか考えてました。

まず考えたのは

testList.ifPresent(c ->{
            c.forEach(t -> {
                if(t=="hoge") {
                    return "OK";
                }
            });
        });

コンパイルエラー
なぜならifPresent,forEach共にConsumer型?であり、値を消費するしかできないからです。
戻り値を返すことはできません。

で考えたのが

List<String> test(Optional<List<String>> testList){
        List<String> selectedList = new ArrayList<>();
        testList.ifPresent(c ->{
            c.forEach(t -> {
                if(t=="hoge") {
                    selectedList.add("Ok");
                }
            });
        });
        return selectedList;
    }

これで一応文字列のリストを返す事ができています。
戻り値がStringならget(0)をしてもらえば文字列を取れます。
が、言うまでもなく必要のない配列を作ってるのでクソです。

今回業務で使ったのはたまたまListの返却でよかったのですが、戻り値をStringで返さなければならない場合は素直にifを使うのが良さそうです。

ifPresentを使いながら単数の戻り値を返すいい方法あれば教えてください。

nullチェックめんどくさいから
規約でnullの可能性があるときは全部Optinalで返すことにしてほしいなあ・・・

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away