Question

Pour un millionième fois, j'aurais aimé utiliser un IN opérateur en java, similaire à IN Opérateur en SQL. Il pourrait simplement être mis en œuvre en tant que sucre syntaxique du compilateur. Donc ça

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

... serait vraiment génial. En fait, ce qui précède est le même que la construction plutôt verbeuse (et non adaptée aux primitives) ici:

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

Ou comme ça pour int, long et des types similaires:

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

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

Ou peut-être qu'il pourrait y avoir des implémentations encore plus efficaces.

Question:

Est-ce que quelque chose comme ça va faire partie de Java 8? Comment puis-je faire une telle suggestion, sinon? Ou y a-t-il une construction équivalente que je pourrais utiliser dès maintenant?

Était-ce utile?

La solution

Utilisant OP4J:

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

En utilisant la même approche, vous pouvez créer une classe d'assistance 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 une importation statique, vous pouvez écrire:

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

Autres conseils

Vous pouvez écrire une méthode d'assistance pour 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)) {

}

Il y a eu une très vieille proposition Collection littéraux.

Actuellement il y a Sets.newHashSet en goyave qui est assez similaire à Arrays.asList.

Vous cherchez le Processus communautaire Java

Je doute que quelque chose comme un opérateur soit mis à disposition, car il existe déjà plusieurs façons de le faire (comme utiliser Switch) comme vous l'avez souligné vous-même.

Et je pense que la liste des exigences pour Project-Coin et J8 est déjà entièrement chargée pour être considérée comme quelque chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top