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()));