Pythonでは、次のことができます
if(a!=b!=c)
それらを分離してすべての「&&」演算子を記述することなく、Java で同じことを行うにはどうすればよいでしょうか? 10 個の要素すべてが等しくないことを確認しようとしていますが、等価ステートメントを 45 回書く必要はありません。
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
) の場合、特定の型に対して非ジェネリック バージョンを作成できます。
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);
Java にはそのようなオプションはありません (&& を使用せずにそのようなことを行うことはできません)。Java は Python ではありません
正直なところ、Java でこれを行うためのネイティブな方法はありません。
all
しかし、代わりに Python のメソッドのシンタックス シュガーを実装してみませんか? 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
}