我经常发现自己在写这样的陈述......
if (name.equals("fred") || name.equals("bob") || name.equals("jack")){
}
或原语......
if (numb==4 || numb==45 || numb=91){
}
有更简洁的方法吗?
编辑:我的问题确实是重复的。对于读这篇文章的人,我建议看看其他主题 - 他们有一些好东西。
答案 0 :(得分:3)
您可以使用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("摆锤|食品| fred的"){ //做一点事 }
答案 1 :(得分:2)
使用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
}
如果您需要使用&&
代替||
...
您也可以用预定义的数组或String
替换长手List
列表,这可以让您编写单个方法......
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
语句就像你一直
答案 2 :(得分:2)
真正的答案是你不应该总是追求更多&#34;简洁&#34;。除非您遇到某种效率问题,否则请选择最具可读性的内容。
话虽如此,我还会采用另一种方式来做到这一点:
if(Arrays.asList("fred", "bob", "jack").contains(name)){
}