32 votes

Java dans l'opérateur

Pour la millionième fois, j'aurais bien aimé utiliser un IN opérateur en Java, semblable à l' IN opérateur SQL. Il pourrait juste être mis en œuvre en tant que compilateur sucre syntaxique. Donc, ce

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

...serait vraiment génial. En fait, le ci-dessus est le même que le assez bavard (et n'est pas adaptée pour les primitives) construire ici:

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

Ou comme ceci pour int, long , et des types similaires:

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

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

Ou peut-être il pourrait être encore plus efficace implémentations.

Question:

Est quelque chose comme cela va être une partie de Java 8? Comment puis-je faire une telle suggestion, si ce n'? Ou est-il un équivalent de construire que je pourrais utiliser?

19voto

Peter Lawrey Points 229686

Vous pouvez écrire une méthode d'aide à le faire.

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

}

14voto

Aaron Digulla Points 143830

À l'aide de op4j:

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

En utilisant la même méthode, vous pouvez créer un helper classes Is avec une méthode 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 );
    }
}

avec un statique de l'importation, vous pouvez écrire:

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

7voto

Miserable Variable Points 17515

Il y a eu une très ancienne proposition pour la collecte des littéraux.

Il y a actuellement Sets.newHashSet dans la Goyave qui est assez similaire Arrays.asList.

6voto

Adam Batkin Points 20920

Vous êtes à la recherche pour le Java Community Process

1voto

Suraj Chandran Points 12859

Je doute quelque chose comme un opérateur serait mis à disposition, comme il y a déjà plusieurs façons de le faire(comme l'utilisation d'un interrupteur que vous avez vous-même souligné.

Et je pense que la liste des besoins pour un projet de pièce de monnaie et J8 est déjà entièrement chargé à une chose de ce genre à être considéré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X