Больше и меньше, чем в одном заявлении

Мне было интересно, у вас есть опрятный способ сделать это?

if(orderBean.getFiles().size() > 0  && orderBean.getFiles().size() < 5)

без объявления переменной, которая больше не нужна?

int filesCount = orderBean.getFiles().size();
if(filesCount > 0  && filesCount < 5) {

Я имею в виду, что в цикле for мы "объявляем условия" для фактической итерации, можно объявить переменную, а затем указать условия. Здесь нельзя сделать это, и ничто не может сделать что-то вроде

if(5 > orderBean.getFiles().size() > 0)

Ответы

Ответ 1

Простой способ утилиты:

public static boolean isBetween(int value, int min, int max)
{
  return((value > min) && (value < max));
}

Ответ 2

В нескольких сторонних библиотеках есть классы, инкапсулирующие концепцию диапазона, такие как Apache commons-lang Range (и подклассы).

Используя такие классы, вы можете выразить свое ограничение, подобное:

if (new IntRange(0, 5).contains(orderBean.getFiles().size())
// (though actually Apache Range is INclusive, so it'd be new Range(1, 4) - meh

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

Однако, не вытягивая другие библиотеки и используя их классы, сильный синтаксис Java означает, что вы не можете массировать сам язык, чтобы обеспечить эту функцию красиво. И (по моему мнению), вытягивание в стороннюю библиотеку только для этого небольшого количества синтаксического сахара не стоит.

Ответ 3

Если getFiles() возвращает java.util.Collection, ! getFiles(). isEmpty() && & & размер < 5 может быть в порядке.

С другой стороны, если вы не инкапсулируете контейнер, который предоставляет метод, например boolean sizeBetween(int min, int max).

Ответ 4

Это один уродливый способ сделать это. Я бы просто использовал локальную переменную.

EDIT: Если также размер() > 0.

if (orderBean.getFiles().size() + Integer.MIN_VALUE-1 < Integer.MIN_VALUE + 5-1)

Ответ 5

java не является питоном.

вы не можете сделать ничего подобного

if(0 < i < 5) or if(i in range(0,6))

вы упомянули самый простой способ:

int i = getFilesSize();
if(0 < i && i < 5){
    //operations

}

о

   if(0 < i){
       if(i < 5){
          //operations
       }
     }

Ответ 6

Если это вас действительно беспокоит, почему бы не написать собственный метод isBetween(orderBean.getFiles().size(),0,5)?

Другим вариантом является использование isEmpty, поскольку оно является более четким:

if(!orderBean.getFiles().isEmpty() && orderBean.getFiles().size() < 5)

Ответ 7

Пожалуйста, просто напишите статический метод где-нибудь и напишите:

if( isSizeBetween(orderBean.getFiles(), 0, 5) ){
    // do your stuff 
}

Ответ 8

В настоящее время вы можете использовать lodash:

var x = 1;
var y = 5;
var z = 3;
_.inRange(z,x,y);
//results true