Pregunta

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.Entonces esto

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

... realmente sería genial.De hecho, lo anterior es lo mismo que la construcción bastante detallada (y no adaptada para primitivas) aquí:

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

O así 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 será parte de Java 8?¿Cómo puedo hacer tal sugerencia, si no?¿O hay alguna construcción equivalente que pueda usar ahora mismo?

¿Fue útil?

Solución

Usando op4j :

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

Con el mismo enfoque, podría crear clases auxiliares Is 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)) {
}

Otros consejos

Puede escribir un método auxiliar 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)) {

}

Ha habido una propuesta muy antigua para literales de colección .

Actualmente hay Sets.newHashSet en Guayaba que es bastante similar a Arrays.asList.

Dudo que algo como un operador IN esté disponible, ya que hay varias formas de hacer esto (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 ser considerado algo así.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top