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

}

有更简洁的方法吗?

编辑:我的问题确实是重复的。对于阅读本文的任何人,我建议也看看其他线程 - 它们有一些好东西。

您可以使用 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("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)){

    }