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? Как я могу сделать такое предложение, если нет? Или есть эквивалентная конструкция, которую я мог бы использовать прямо сейчас?
Ответы
Ответ 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)) {
}
Ответ 3
Было очень давнее предложение для литералов коллекции.
В настоящее время существует Sets.newHashSet
в Гуаве, который очень похож на Arrays.asList
.
Ответ 4
Вы ищете Java Community Process
Ответ 5
Я сомневаюсь, что что-то вроде оператора IN будет доступно, так как есть уже несколько способов сделать это (например, с помощью переключателя), как вы сами указали.
И я думаю, что список требований для проектной монеты и J8 уже полностью загружен, чтобы быть чем-то похожим на это.