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

mi7gmzs6  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(205)

这个问题在这里已经有答案了

将一个字符串与一个表达式中的多个值进行比较(18个答案)
5年前关门了。
我经常发现自己在写这样的话。。。

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

}

或者用原语。。。

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

}

有没有更简洁的方法?
编辑:我的问题确实是重复的。对于任何阅读本文的人,我建议大家也看看其他的线程——它们有一些好的东西。

uhry853o

uhry853o1#

真正的答案是,你不应该总是追求更“简洁”。选择最可读的,除非你遇到了效率问题。
话虽如此,我还是要用另一种方法:

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

    }
9o685dep

9o685dep2#

你可以。。。

使用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 像你一样的陈述

zaq34kh6

zaq34kh63#

你可以用 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   
}

如果你有很长很复杂的方法,这是一个很好的组织代码的方法。
更好的是,对字符串对象使用regex:if(name.matches(“bob | food | fred”){//do something}

相关问题