java:比较一个变量和几个其他变量的最简洁的方法

java:比较一个变量和几个其他变量的最简洁的方法,java,if-statement,syntax,Java,If Statement,Syntax,我经常发现自己在写这样的陈述 if (name.equals("fred") || name.equals("bob") || name.equals("jack")){ } 或者使用原语 if (numb==4 || numb==45 || numb=91){ } 有没有更简洁的方法 编辑:我的问题确实是重复的。对于阅读本文的任何人,我建议大家也看看其他线程-它们有一些好东西。您可以使用switch和case语句: 例如,而不是: if (numb==4 || numb==45 ||

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

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   
}
如果你有很长很复杂的方法,这是一个很好的组织代码的方法

更好的是,对字符串对象使用正则表达式: 如果(姓名匹配(“bob | food | fred”){ //做点什么 }

你可以。。。 使用switch语句

switch (name) {
    case "fred":
    case "bob":
    case "jack":
        break;
}

你可以。。。 使用某种类型的
集合

if (Arrays.asList("fred", "bob", "jack").contains("fred")) {
    // Have match
}
如果您有动态值,这将非常有用

你也可以使用像

if (Arrays.asList("fred", "bob", "jack").containsAll(Arrays.asList("fred", "bob", "jack"))) {
    // Have match
}
if (matchOr(Arrays.asList("fred", "bob", "jack"), name)) {
    //...
}
如果您需要使用
&&
而不是
|

您还可以用预定义的数组或
列表
替换长的
字符串
列表,这可以让您编写单个方法

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
语句。真正的答案是您不应该总是追求更“简洁”的内容.选择可读性最好的,除非你遇到效率问题

话虽如此,我还是要用另一种方法:

    if(Arrays.asList("fred", "bob", "jack").contains(name)){

    }

switch
…?如果你有&&而不是| |?@KickButtowski,那会发生什么?这没有意义。一个值不能等于多个原语,对吗?@k|g我没有谈论这个具体情况,但我一般都会问。这里的另一个重复:对我来说并不简洁……如果你有30个选择,它是,并且更容易阅读le imo.@August我发现它更容易阅读和格式化。如果你有&&而不是| |?@KickButtowski什么数字同时等于4、45和91?这是一个荒谬的情况。如果你有&&而不是| |会发生什么?也许有意思的是,你的答案是,从Java 7开始就支持打开字符串。@KiKickButtowski那么你显然不能这么做,但OP不是这么要求的。@KickButtowski同样,一个值不能同时是
==2
==5
。跳过这个块。@KickButtowski?在什么情况下,你会有多个等式包含同一个变量?你能给出一个情况吗?j
    if(Arrays.asList("fred", "bob", "jack").contains(name)){

    }