java:将一个变量与其他变量进行比较的最简洁方法
java: most concise way to compare one variable against several others
我经常发现自己写这样的 if 语句...
if (name.equals("fred") || name.equals("bob") || name.equals("jack")){
}
或使用原语...
if (numb==4 || numb==45 || numb=91){
}
有更简洁的方法吗?
编辑:我的问题确实是重复的。对于阅读本文的任何人,我建议也看看其他线程 - 它们有一些好东西。
您可以使用 switch
和 case
语句:
例如代替:
if (numb==4 || numb==45 || numb=91){
//do stuff
}
你可以这样做:
switch(numb){
case 4:
case 45:
case 91:
//do something regarding the numbers 4 45 and 91
break;
default:
break;
}
如果您非常注重可读性(因为这是这个问题所关心的),您还可以在布尔检查之间创建换行符:
if(name.veryLongMethodHere("fred") ||
name.veryLongMethodHere("bob") ||
name.veryLongMethodHere("food")){
//do more stuff
}
如果您的方法又长又复杂,这是一种组织代码的好方法。
更好的是,对 String 对象使用正则表达式:
如果(name.matches("bob|food|fred"){
//做一点事
}
你可以...
使用 switch 语句...
switch (name) {
case "fred":
case "bob":
case "jack":
break;
}
和
switch (numb) {
case 4:
case 45:
case 91:
break;
}
你可以...
使用某种类型的 Collection
...
if (Arrays.asList("fred", "bob", "jack").contains("fred")) {
// Have match
}
如果你有动态值,这很有用...
您也可以使用类似...
if (Arrays.asList("fred", "bob", "jack").containsAll(Arrays.asList("fred", "bob", "jack"))) {
// Have match
}
如果您需要使用 &&
而不是 ||
...
您也可以用预定义数组或 List
替换长手 String
列表,这样您就可以编写单个方法...
public <T> boolean matchOR(List<T> want, T have) {
return want.contains(have);
}
public <T> boolean matchAnd(List<T> want, List<T> have) {
return want.containsAll(have);
}
这样你就可以写出类似...
if (matchOr(Arrays.asList("fred", "bob", "jack"), name)) {
//...
}
作为一个想法...
在某些时候,需要考虑上下文,例如,上面的示例允许您提供一系列灵活的条件,但您可能不想这样做,并且必须编写您的 if
像你一样发表声明
真正的答案是你不应该总是追求更多 "concise"。寻找最易读的内容,除非您遇到某种效率问题。
话虽这么说,我会用另一种方法来做到这一点:
if(Arrays.asList("fred", "bob", "jack").contains(name)){
}
我经常发现自己写这样的 if 语句...
if (name.equals("fred") || name.equals("bob") || name.equals("jack")){
}
或使用原语...
if (numb==4 || numb==45 || numb=91){
}
有更简洁的方法吗?
编辑:我的问题确实是重复的。对于阅读本文的任何人,我建议也看看其他线程 - 它们有一些好东西。
您可以使用 switch
和 case
语句:
例如代替:
if (numb==4 || numb==45 || numb=91){
//do stuff
}
你可以这样做:
switch(numb){
case 4:
case 45:
case 91:
//do something regarding the numbers 4 45 and 91
break;
default:
break;
}
如果您非常注重可读性(因为这是这个问题所关心的),您还可以在布尔检查之间创建换行符:
if(name.veryLongMethodHere("fred") ||
name.veryLongMethodHere("bob") ||
name.veryLongMethodHere("food")){
//do more stuff
}
如果您的方法又长又复杂,这是一种组织代码的好方法。
更好的是,对 String 对象使用正则表达式: 如果(name.matches("bob|food|fred"){ //做一点事 }
你可以...
使用 switch 语句...
switch (name) {
case "fred":
case "bob":
case "jack":
break;
}
和
switch (numb) {
case 4:
case 45:
case 91:
break;
}
你可以...
使用某种类型的 Collection
...
if (Arrays.asList("fred", "bob", "jack").contains("fred")) {
// Have match
}
如果你有动态值,这很有用...
您也可以使用类似...
if (Arrays.asList("fred", "bob", "jack").containsAll(Arrays.asList("fred", "bob", "jack"))) {
// Have match
}
如果您需要使用 &&
而不是 ||
...
您也可以用预定义数组或 List
替换长手 String
列表,这样您就可以编写单个方法...
public <T> boolean matchOR(List<T> want, T have) {
return want.contains(have);
}
public <T> boolean matchAnd(List<T> want, List<T> have) {
return want.containsAll(have);
}
这样你就可以写出类似...
if (matchOr(Arrays.asList("fred", "bob", "jack"), name)) {
//...
}
作为一个想法...
在某些时候,需要考虑上下文,例如,上面的示例允许您提供一系列灵活的条件,但您可能不想这样做,并且必须编写您的 if
像你一样发表声明
真正的答案是你不应该总是追求更多 "concise"。寻找最易读的内容,除非您遇到某种效率问题。
话虽这么说,我会用另一种方法来做到这一点:
if(Arrays.asList("fred", "bob", "jack").contains(name)){
}