Pergunta

Pela milionésima vez, eu gostaria de usar um operador IN em Java, semelhante ao operador IN em SQL.Ele poderia ser implementado apenas como açúcar sintático do compilador.Então, isso

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

... seria realmente incrível.Na verdade, o acima é o mesmo que a construção bastante detalhada (e não adaptada para primitivos) aqui:

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

Ou assim para int, long e tipos semelhantes:

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

  case d:
  case e:
    // ..
    break;
 }

Ou talvez possa haver implementações ainda mais eficientes.

Pergunta:

Algo assim fará parte do Java 8?Como posso fazer tal sugestão, se não?Ou existe alguma construção equivalente que eu possa usar agora?

Foi útil?

Solução

Usando op4j :

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

Usando a mesma abordagem, você poderia criar classes auxiliares Is com um 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 );
    }
}

com uma importação estática, você pode escrever:

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

Outras dicas

Você pode escrever um método auxiliar para fazer isso.

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)) {

}

Existe uma proposta muito antiga para literais de coleção .

Atualmente existe Sets.newHashSet no Guava, que é muito semelhante a Arrays.asList.

Você está procurando o Processo da comunidade Java

Duvido que algo como um operador IN seja disponibilizado, pois já existem várias maneiras de fazer isso (como usar switch), como você mesmo indicou.

E acho que a lista de requisitos para project-coin e J8 já está totalmente carregada para ser considerada como esta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top