有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否有干净的语法来检查多个变量是否都具有相同的值?

我们有n个变量X = {x1,x2,...xn},它们不在任何结构中

例如,在python中,我可以这样做:if (x1 == x2 == x3 == xn):

在java中我必须做:if((x1 == x2) && (x2 == x3) && (x3 == xn)):

你知道改进这种语法的简单方法吗?(想象一下很长的变量名和很多变量名)

谢谢


共 (6) 个答案

  1. # 1 楼答案

    /*
    * reference - basic String to compare against
    * entries - all other objects for comparison
    */
    public static boolean allEqual(String reference, String... entries) {
            return Arrays.stream(entries)
                    .allMatch(entry -> Objects.equals(reference, entry));
    }
    
    /*
    * Method can be generalized to use <T> instead of String
    */
    public static <T>boolean allEqual(T reference, T... entries) {
        return Arrays.stream(entries)
                .allMatch(entry -> Objects.equals(reference, entry));
    }
    
    public static void main(String[] args) {
        System.out.println(allEqual("X", "X", "X", "X")); // true
        System.out.println(allEqual("X", "X", "Y"));      // false
        System.out.println(allEqual("X"));                // true
    
        System.out.println(allEqual(10, 10, 9));          // false
        System.out.println(allEqual(10, 10));             // true
        System.out.println(allEqual(10, new Integer[] {10, 10, 10})); // true
    }
    
  2. # 2 楼答案

    类似于@Jon的解决方案,但更短

    public static boolean areAllTheSame(int value, int... values) {
        for (int i: values) if(value != i) return false;
        return true;
    }
    
  3. # 3 楼答案

    您可以创建如下实用程序方法:

    public boolean allEqual(Object... objs) {
        if(objs.length < 2) return true; // 0 or 1 objects are all equal
        Object key = objs[0]; // pick one
        for(Object o : objs) if(!o.equals(key)) return false;
        return true;
    }
    

    另一个选择是

    public boolean allEqual(Object key, Object... objs) {
        for(Object o : objs) if(!o.equals(key)) return false;
        return true;
    }
    

    简化许多样板逻辑。那就走吧

    if(allEqual(x,x1,x2,x3))
    

    很明显,这两者是相互排斥的(它们是明显的模棱两可),但你可以这样做 allEqualallEqualWithKey

  4. # 4 楼答案

    不幸的是,没有,没有可用的语法糖。这是关于Java的常见抱怨

  5. # 5 楼答案

    如果您有很多这样的变量,您是否考虑过将它们放在一个集合中,而不是将它们作为单独的变量?在这一点上有多种选择

    如果您发现自己经常这样做,那么可能需要编写帮助器方法,可能需要使用varargs语法。例如:

    public static boolean areAllEqual(int... values)
    {
        if (values.length == 0)
        {
            return true; // Alternative below
        }
        int checkValue = values[0];
        for (int i = 1; i < values.length; i++)
        {
            if (values[i] != checkValue)
            {
                return false;
            }
        }
        return true;
    }
    

    glowcoder提出的另一种选择是强制至少有一个值:

    public static boolean areAllEqual(int checkValue, int... otherValues)
    {
        for (int value : otherValues)
        {
            if (value != checkValue)
            {
                return false;
            }
        }
        return true;
    }
    

    在这两种情况下,请与以下内容一起使用:

    if (HelperClass.areAllEqual(x1, x2, x3, x4, x5))
    {
        ...
    }
    
  6. # 6 楼答案

    您可以编写一种方法,使其看起来不那么麻烦:

    boolean areAllEqual(Object... values) {
        if (values.length < 2) {
            return true;
        }
    
        for (int i = 1; i < values.length; i++) {
            if (!values[i].equals(values[0])) {
                return false;
            }
        }
    
        return true;
    }
    

    像这样使用它:

    if (areAllEqual(x1, x2, x3, x4, x5)) {
        // do something
    }
    

    编辑速度太慢…!:-(