Подтвердить что ты не робот

Java в операторе

В миллионный раз мне бы хотелось использовать оператор IN в Java, аналогичный оператору IN в SQL. Это может быть просто реализовано как синтаксический сахар компилятора. Итак, это

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

... действительно будет потрясающе. На самом деле выше приведено то же самое, что и довольно подробный (и не адаптированный для примитивов):

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

Или как это для int, long и подобных типов:

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

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

Или, может быть, могут быть еще более эффективные реализации.

Вопрос:

Что-то вроде этого будет частью Java 8? Как я могу сделать такое предложение, если нет? Или есть эквивалентная конструкция, которую я мог бы использовать прямо сейчас?

4b9b3361

Ответ 1

Использование op4j:

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

Используя тот же подход, вы можете создать вспомогательные классы Is с помощью метода 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 );
    }
}

со статическим импортом, вы можете написать:

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

Ответ 2

Вы можете написать вспомогательный метод, чтобы сделать это.

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

}

Ответ 5

Я сомневаюсь, что что-то вроде оператора IN будет доступно, так как есть уже несколько способов сделать это (например, с помощью переключателя), как вы сами указали.

И я думаю, что список требований для проектной монеты и J8 уже полностью загружен, чтобы быть чем-то похожим на это.