Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中使用布尔值的嵌套ifs的替代方法_Java_If Statement_Collections_Java 8_Switch Statement - Fatal编程技术网

Java中使用布尔值的嵌套ifs的替代方法

Java中使用布尔值的嵌套ifs的替代方法,java,if-statement,collections,java-8,switch-statement,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 } i

我有下面的代码块

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-是一个布尔对象 我尝试使用switch case,将isMine转换为字符串,如下所示

 String.valueOf(isMine) 

但是没有成功。建议一种更好更快的方法在java中实现上述代码。

this.books=isMine!=无效的(isMine?this.myList:this.notMyList):this.allList


使用三元运算符内部,例如

可以通过使用else-if:

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;
  }
public List getBookList(Boolean-isMine){
返回isMine==null?allList:getBookList(isMine.booleanValue());
}
公共列表getBookList(布尔isMine){
返回isMine?myList:notMyList;
}

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

你现在的方式看起来不错。你有一个答案,用平坦的方式和嵌套的三元

如果您仍想了解如何在这种情况下使用switch(请不要将此代码投入生产。发布此代码是为了向您展示一种方法)

使用
String实现的正确方法。valueOf(isMine)

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

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

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

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

List<Books> output = Match(input).of(
        Case($(true), dbCallX()),
        Case($(false), dbCallY()),
        Case($(), dbCallZ()));
列表输出=匹配(输入)。共(
大小写($(true),dbCallX()),
大小写($(false),dbcaly()),
Case($(),dbCallZ());

你说的更快是什么意思?看起来不错。您可以通过反转空检查(参见Flown的答案)使阅读更容易一些,但除此之外,…@sama
布尔值(empasis大写)可以是null@Sam既然有一个装箱版本,你可以。@Sam,如果他正在使用包装器对象,你可以。你说“但不起作用”是什么意思?具体点。我看不出有什么理由
String.valueOf(isMine)
不起作用。除此之外,为什么你有一个条件呢?在所有情况下,您都在执行相同的
操作。books=//从数据库获取它
…这里保存的代码行确实不值得读性恶化。
列出books=Optional.ofNullable(isMine).map(v->v?dbCallX():dbcaly()).orElseGet(()->dbCallZ())
List<Books> output = Match(input).of(
        Case($(true), dbCallX()),
        Case($(false), dbCallY()),
        Case($(), dbCallZ()));