Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@0daryo

業務で役立った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で返すことにしてほしいなあ・・・

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
0daryo
webエンジニア Goが仕事 Javaかきます

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?