在python中,你可以做到
if(a!=b!=c)
你怎么能用Java做同样的事情而不必分开它们并写下所有的“&&&”运营商?我试图检查所有10个元素是不相等的,我不想写相等的语句45次。
答案 0 :(得分:4)
您无法在Java中执行该操作。另请注意,如果a
,b
等不是基元,那么您可能应该使用equals
而不是==
(或!=
)。后者只检查对象的身份,而不是值的相等。
如果要检查10个元素是否都是不同的,可以将它们放入Set
实现(例如HashSet
)并检查该集合是否包含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;
}
如果您的元素是基元(例如int
),那么您可以为特定类型编写非泛型版本。
答案 1 :(得分:1)
如果您需要比较45个变量,程序中有问题。 尝试使用数组和循环。
答案 2 :(得分:0)
我同意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);
答案 3 :(得分:0)
java中没有这样的选项(如果不使用&amp;&amp ;;则不能这样做)。 Java不是Python
答案 4 :(得分:0)
老实说,不,在Java中没有本地方法可以做到这一点。
但是,为什么我们不为Python的all
方法实现语法糖呢?使用varargs,并不困难。但它确实有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
}