如何在java中的if语句中组合相等运算符?

如何在java中的if语句中组合相等运算符?,java,operators,Java,Operators,在python中,您可以 if(a!=b!=c) 如何在Java中做同样的事情而不必将它们分开并编写所有的“&&”操作符?我试图检查所有10个元素是否都不相等,我不想写45次相等语句 我同意Set可能是最有效的解决方案,但是如果您需要为比较提供某种定制,您可以使用类似于 Comparable[] values = new Comparable[]{1, 2, 3, 4, 5}; boolean matches = true; for (int outter = 0; outter < v

在python中,您可以

if(a!=b!=c)

如何在Java中做同样的事情而不必将它们分开并编写所有的“&&”操作符?我试图检查所有10个元素是否都不相等,我不想写45次相等语句

我同意
Set
可能是最有效的解决方案,但是如果您需要为比较提供某种定制,您可以使用类似于

Comparable[] values = new Comparable[]{1, 2, 3, 4, 5};
boolean matches = true;
for (int outter = 0; outter < values.length; outter++) {
    for (int inner = outter + 1; inner < values.length; inner++) {
        matches &= values[outter].compareTo(values[inner]) == 0;
    }
}
System.out.println(matches);
Comparable[]值=新的可比[]{1,2,3,4,5};
布尔匹配=真;
对于(int-outter=0;outter
我同意
Set
可能是最有效的解决方案,但是如果您需要为比较提供某种定制,您可以使用类似于

Comparable[] values = new Comparable[]{1, 2, 3, 4, 5};
boolean matches = true;
for (int outter = 0; outter < values.length; outter++) {
    for (int inner = outter + 1; inner < values.length; inner++) {
        matches &= values[outter].compareTo(values[inner]) == 0;
    }
}
System.out.println(matches);
Comparable[]值=新的可比[]{1,2,3,4,5};
布尔匹配=真;
对于(int-outter=0;outter
java中没有这样的选项(如果不使用&&,就无法完成这样的事情)。Java不是Python

在Java中没有这样的选项(如果不使用&&,就不能做这样的事情)。Java不是Python,如果您需要比较45个变量,那么您的程序中会出现一些错误。
尝试使用数组和循环。

如果需要比较45个变量,程序中可能有错误。
尝试使用数组和循环。

在Java中无法执行该操作。此外,请注意,如果
a
b
等不是原语,那么您可能应该使用
equals
,而不是
=
(或
!=
)。后者只检查对象标识,而不检查值是否相等

如果要检查10个元素是否都是不同的,可以将它们放入
集合
实现中(例如
哈希集合
),并检查集合是否包含10个元素。或者更好(感谢@allonhadaya的评论),检查是否添加了每个元素。以下是一种适用于任意数量的任意类型对象的通用方法:

public static <T> boolean areDistinct(T... elements) {
    Set<T> set = new HashSet<T>();
    for (T element : elements) {
        if (!set.add(element)) {
            return false;
        }
    }
    return true;
}
publicstaticboolearnarestinct(T…元素){
Set=newhashset();
对于(T元素:元素){
如果(!set.add(元素)){
返回false;
}
}
返回true;
}

如果元素是原语(例如,
int
),则可以为特定类型编写非泛型版本。

您不能在Java中执行该操作。此外,请注意,如果
a
b
等不是原语,那么您可能应该使用
equals
,而不是
=
(或
!=
)。后者只检查对象标识,而不检查值是否相等

如果要检查10个元素是否都是不同的,可以将它们放入
集合
实现中(例如
哈希集合
),并检查集合是否包含10个元素。或者更好(感谢@allonhadaya的评论),检查是否添加了每个元素。以下是一种适用于任意数量的任意类型对象的通用方法:

public static <T> boolean areDistinct(T... elements) {
    Set<T> set = new HashSet<T>();
    for (T element : elements) {
        if (!set.add(element)) {
            return false;
        }
    }
    return true;
}
publicstaticboolearnarestinct(T…元素){
Set=newhashset();
对于(T元素:元素){
如果(!set.add(元素)){
返回false;
}
}
返回true;
}

如果您的元素是原语(例如,
int
),那么您可以为特定类型编写一个非泛型版本。

老实说,没有,在Java中没有本机方法可以做到这一点

但是,我们为什么不为Python的
all
方法实现语法糖呢?有了瓦拉格,这并不难。不过,它确实有O(n)运行时成本

public static boolean all(Boolean... theBools) {
    Boolean result = Boolean.TRUE;
    for(Boolean b : theBools) {
        if(null == b || !b) {
            result = Boolean.FALSE;
            break;
        }
    }
    return result;
}
您可以这样使用它:

if(YourClass.all(a, b, c, d, e, f, g, h, i, j)) {
    // something to do if ALL of them are true
}

老实说,没有,在Java中没有本机方法来实现这一点

但是,我们为什么不为Python的
all
方法实现语法糖呢?有了瓦拉格,这并不难。不过,它确实有O(n)运行时成本

public static boolean all(Boolean... theBools) {
    Boolean result = Boolean.TRUE;
    for(Boolean b : theBools) {
        if(null == b || !b) {
            result = Boolean.FALSE;
            break;
        }
    }
    return result;
}
您可以这样使用它:

if(YourClass.all(a, b, c, d, e, f, g, h, i, j)) {
    // something to do if ALL of them are true
}

你有10个不同的变量?这听起来应该是一个数组,并与
for
语句进行比较。您可以编写一个方法,该方法接受一个vararg或一个容器,并对它们进行比较,然后返回一个布尔值。我认为Python代码并不能完全满足您的要求。“注意,opa b opb c并不意味着a和c之间有任何类型的比较”()你有10个不同的变量吗?这听起来应该是一个数组,并与
for
语句进行比较。您可以编写一个方法,该方法接受一个vararg或一个容器,并对它们进行比较,然后返回一个布尔值。我认为Python代码并不能完全满足您的要求。“注意opa b opb c并不意味着a和c之间有任何比较”()OP说他们不想这样做。@Makoto和我不想吃我的蔬菜;)@MadProgrammer
Set
将使用
equals
hashCode
方法,这些方法可以被覆盖以进行自定义比较。@allonhadaya如果您只想在某个任意字段上进行快速比较,那么这将是一项艰巨的工作。你并不总是想改变hashcode或equals的行为。globallyOP说他们不想这样做。@Makoto和我不想吃我的蔬菜;)@MadProgrammer
Set
将使用
equals
hashCode
方法,这些方法可以被覆盖以进行自定义比较。@allonhadaya如果您只想在某个任意字段上进行快速比较,那么这将是一项艰巨的工作。您并不总是希望更改hashcode或equals的行为globally@Ted你可以实现一种短路b