java:将一个变量与其他几个变量进行比较的最简洁方法

时间:2015-01-15 01:13:13

标签: java if-statement syntax

我经常发现自己在写这样的陈述......

if (name.equals("fred") || name.equals("bob") || name.equals("jack")){

}

或原语......

if (numb==4 || numb==45 || numb=91){

}

有更简洁的方法吗?

编辑:我的问题确实是重复的。对于读这篇文章的人,我建议看看其他主题 - 他们有一些好东西。

3 个答案:

答案 0 :(得分:3)

您可以使用switchcase语句:

例如,

而不是:

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)){

    }