могу ли я сделать if короче?

#java #if-statement

#java #if-оператор

Вопрос:

Можно ли сделать операторы if короче? Например:

 if (intno == 0 || intno == 4 || intno == 7)
 

может быть что-то вроде:

 if (intno == 0 || 4 || 7)
 

Это вызовет ошибку, но есть ли что-нибудь подобное?

Комментарии:

1. Нет. Я почти уверен, что об этом уже спрашивали раньше…

2. это должно быть довольно очевидно …… но в любом случае, Int int = 0; было бы то, что это означало

3. Вы должны знать int , что это ключевое слово.

4. Попробуйте написать Int int = 0 , вы наверняка получите ошибку компиляции.

5. Arrays.asList(0,4,7).contains(intno) может быть альтернативой.

Ответ №1:

Для целочисленных типов и перечислений вместо этого можно использовать оператор switch:

 switch(intno) {
     case 0:
     case 4:
     case 7:
          //code here
          break;
}
 

Это также работает для строк в Java 7

Ответ №2:

В комментариях уже было предложено следующее:

 Arrays.asList(0, 4, 7).contains(intno)
 

Это правильно и короче, но медленнее.

Обратите внимание, что этот код выполняет множество операций за кулисами:

  • Преобразуйте 0 , 4 и 7 int s в Integer s .
  • Создайте массив, содержащий эти объекты
  • Создайте List содержащий этот массив
  • Преобразовать intno в Integer
  • Выполните линейный поиск по списку, вызывая equals каждый объект

Это намного медленнее, чем просто три проверки. Конечно, если вы выполняете этот код один раз каждый раз, когда пользователь нажимает кнопку, это не имеет значения. Если вы вызываете его сто раз в секунду, это может произойти.

Однако, на мой взгляд, использование этого может быть более понятным, чем использование длинного if, особенно если вместо 3 есть 15 допустимых условий. Если вместо использования магических чисел вы даже сохраните возвращенный список, вы можете получить некоторые ясности:

 private static final List<Integer> VALID_NUMBERS = Arrays.asList(0, 4, 7);

// ...

if (VALID_NUMBERS.contains(intno)) {
    // Code here
}
 

Это короче и, возможно, понятнее. Это медленнее, поэтому будьте осторожны с этими конструкциями, не используйте его каждый раз, когда сможете.

Ответ №3:

вы можете сгенерировать отображение истины как

 Set<Integer> set = new HashSet<Integer>();
map.add(0);
map.add(4);
map.add(7);
 

и затем

 if(map.contains(intValue){
}
 

Комментарии:

1. Серьезно? Я бы даже не пошел на a Set , а на целое Map ? И тогда ваша карта не содержит значений для других целых чисел и будет возвращать null вместо true или false.

2. Я бы использовал Set здесь. Но это также намного медленнее, чем оригинал if .

3. Как 5 строк короче 1?

4. я не включал его, но в операторе if я меняю intno на другое число, как бы я это сделал с maps?

5. В if отсутствует скобка, и у map нет contains метода.