relacionales precedencia operadores condicionales comparacion booleanos asignacion aritmeticos java syntactic-sugar jls in-operator

precedencia - Java en el operador



operadores relacionales en java (5)

Dudo que algo como un operador IN esté disponible, ya que hay varias maneras de hacerlo (como usar el interruptor) como usted mismo señaló.

Y creo que la lista de requisitos para project-coin y J8 ya está completamente cargada para que sea algo así para ser considerado.

Por millonésima vez, me hubiera gustado usar un operador IN en Java, similar al operador IN en SQL. Simplemente podría implementarse como azúcar sintáctico del compilador. Así que esto

if (value in (a, b, c)) { } else if (value in (d, e)) { }

... sería realmente increíble. De hecho, lo anterior es lo mismo que el constructo bastante detallado (y no adaptado para primitivos) aquí:

if (Arrays.asList(a, b, c).contains(value)) { } else if (Arrays.asList(d, e).contains(value)) { }

O como este para int , long y tipos similares:

switch (value) { case a: case b: case c: // .. break; case d: case e: // .. break; }

O tal vez podría haber implementaciones aún más eficientes.

Pregunta:

¿Algo como esto va a ser parte de Java 8? ¿Cómo puedo hacer tal sugerencia, si no? ¿O hay alguna construcción equivalente que pueda usar ahora?




Puedes escribir un método de ayuda para hacerlo.

public static <T> boolean isIn(T t, T... ts) { for(T t2: ts) if (t.equals(t2)) return true; return false; } // later if (isIn(value, a,b,c)) { } else if (isIn(value, d,e)) { }


Usando op4j :

Op.onListFor(a,b,c).get().contains(value);

Usando el mismo enfoque, podrías crear clases auxiliares con un método in :

class Is<T> { private T value; public Is( T value ) { this.value = value; } public boolean in( T... set ) { for( T item : set ) { if( value.equals( item ) ) { return true; } } return false; } public static <T> Is<T> is( T value ) { return new Is<T>( value ); } }

con una importación estática, puede escribir:

if(is(value).in(a,b,c)) { }