

下記のような実装についてうまい修正方法を教えていただきたいです

[code]

    private boolean isChange(String oldStr, String newStr){
     if(StringUtils.isEmpty(oldStr)){
      if(StringUtils.isEmpty(newStr)){
        return true;
      }else{
        return false;
      }
     } else if (StringUtils.isEmpty(newStr)){
      return true;
     }
     if(!oldStr.equals(newStr)){
      return true;
     }
     return false;
    }
    
[/code]


CC BY-SA 4.0
2020-07-22T10:19:26.357
68828
2020-07-23T08:56:10.427
2020-07-22T12:56:03.387
41188
question
java java8
ネストされたif文を簡略化したいのですが、うまい書き方を教えていただきたいです


true が返る条件は,newが空であり、old.epual(new)がfalseの場合  
つまり

[code]

    private boolean isChange(old, new){
      if(StringUtils.isEmpty(new)){
        return true;
      }else{
        return !old.equal(new)
      }
    }
    
[/code]

もっと短くするのであれば下でも行けるかと。  
可読性下がるのでおすすめはしませんが。

[code]

    return StringUtils.isEmpty(new) ? (true) : (!old.equal(new))
    
[/code]

あと、"new"は予約語なので適切な変数名にしたほうが良いです。  
引数の型宣言もないので適切にする必要があります。


CC BY-SA 4.0
2020-07-22T10:57:30.560
68829
2020-07-22T10:57:30.560
40962
68828
answer


> 下記のような実装についてうまい修正方法を教えていただきたいです

isChangeのメソッド名から、新旧に変動があった場合はtrue、変動がなかったらfalseを返すメソッドを作りたいのだと勝手に解釈しました。

以下はコードの修正例です。StringUtilsは使っていません。  
`null`と`""`空文字列を同一視しません。`null`から`""`に変化する場合、その逆も変動したと判定します。

[code]

    private boolean isChange(String oldStr, String newStr) {
        if (oldStr == null && newStr == null) {
            return false;   //変動なし
        }
        else if (oldStr == null || newStr == null) {
            return true;    //変動あり
        }
        else if (newStr.equals(oldStr)) {
            return false;   //変動なし
        } else {
            return true;    //変動あり
        }
    }
    
    
[/code]

* * *

metropolisさんのコメントを参考に`StringUtils`を調べてみました。  
次のコードは`null`と`""`空文字列を同一視します。`null`から`""`に変化する場合、その逆も変動なしと判定します。

[code]

    if (StringUtils.isEmpty(oldStr) && StringUtils.isEmpty(newStr)) {
        return false;
    }
    else if (StringUtils.equals(oldStr, newStr)) {
        return false;
    } else {
        return true;
    }
    
[/code]

次のコードは`null`と`""`空文字列を同一視しません。`null`から`""`に変化する場合、その逆も変動ありと判定します。

[code]

    private  boolean isChange(String oldStr, String newStr) {
        return !StringUtils.equals(oldStr, newStr);
    }
    
[/code]


CC BY-SA 4.0
2020-07-23T05:52:23.080
68852
2020-07-23T08:56:10.427
2020-07-23T08:56:10.427
35558
35558
68828
answer