嵌套ifs在Java中使用Boolean的替代方法

时间:2017-09-19 08:43:17

标签: java if-statement collections java-8 switch-statement

我有以下代码块

if(Objects.nonNull(isMine)) {
    if (isMine) {
             this.books= // gets it from the database;
    } else  {
            this. books= // gets it from the database
    }

 } else {
     this. books = // gets it from the database
 }

isMine - 是一个布尔对象 我通过将isMine转换为如下字符串

来尝试使用switch case
 String.valueOf(isMine) 

但是没有用。建议用更好,更快的方式在java中实现上面的代码。

5 个答案:

答案 0 :(得分:6)

您可以使用else if:

来展平您的if-else语句
if(isMine == null) {
  books = allList;
} else if(isMine) {
  books = myList;
} else {
  books = notMyList;
}

另一种方法是将检查用于方法:

  public List<Book> getBookList(Boolean isMine) {
    return isMine == null ? allList : getBookList(isMine.booleanValue());
  }

  public List<Book> getBookList(boolean isMine) {
    return isMine ? myList : notMyList;
  }

答案 1 :(得分:1)

this.books = isMine != null ? (isMine ? this.myList : this.notMyList) : this.allList;

在三元运算符内使用ternary operator,例如

答案 2 :(得分:1)

在这种情况下,您可以使用Optional

Boolean isMine = null;
String str = "";
Optional<Boolean> optional = Optional.ofNullable(isMine);
str = optional.map(i -> i ? "a" : "b").orElse("c");
System.out.println(str);

所以它会像:

this.books = optional.map(i -> i ? valForTrue : valForFalse).orElse(valForNull);

答案 3 :(得分:0)

在您的情况下,甚至不要考虑性能,这很小。

您目前的方式看起来不错。而你也有扁平的方式和嵌套的三元组的答案。

如果您仍想学习如何在这种情况下使用开关(请不要将此代码投入生产。发布以便向您展示方式)

使用String.valueOf(isMine)的正确方法是

switch ( String.valueOf(isMine) ) {
        case "null":
            //TODO
            break;
        case "true":
            //TODO
            break;
        case "false":
            //TODO
        break;
        }

答案 4 :(得分:0)

使用vavr.io提供的模式匹配,它可以变得非常干净:

List<Books> output = Match(input).of(
        Case($(true), dbCallX()),
        Case($(false), dbCallY()),
        Case($(), dbCallZ()));