我有以下代码块
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中实现上面的代码。
答案 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()));