Frage

Zum einmillionsten Mal hätte ich gerne einen IN-Operator in Java verwendet, ähnlich dem IN-Operator in SQL.Es könnte einfach als syntaktischer Compilerzucker implementiert werden.Also das

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

... wäre wirklich großartig.Tatsächlich ist das Obige dasselbe wie das ziemlich ausführliche (und nicht für Grundelemente angepasste) Konstrukt hier:

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

Oder so für int, long und ähnliche Typen:

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

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

Oder es könnte noch effizientere Implementierungen geben.

Frage:

Wird so etwas Teil von Java 8 sein?Wie kann ich einen solchen Vorschlag machen, wenn nicht?Oder gibt es ein gleichwertiges Konstrukt, das ich jetzt verwenden könnte?

War es hilfreich?

Lösung

Verwenden von op4j :

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

Mit demselben Ansatz können Sie eine Is-Hilfsklasse mit der Methode in erstellen:

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 );
    }
}

Mit einem statischen Import können Sie schreiben:

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

Andere Tipps

Sie können dazu eine Hilfsmethode schreiben.

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

}

Es gab einen sehr alten Vorschlag für Sammlungsliterale .

Derzeit gibt es Sets.newHashSet in Guave, der dem Arrays.asList ziemlich ähnlich ist.

Sie suchen nach dem Java-Community-Prozess

Ich bezweifle, dass so etwas wie ein IN-Operator zur Verfügung gestellt wird, da es bereits mehrere Möglichkeiten gibt (wie die Verwendung eines Schalters), wie Sie selbst betont haben.

Und ich denke, die Anforderungsliste für Projektmünzen und J8 ist bereits vollständig geladen, um so etwas zu berücksichtigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top