Лучшая практика проверки пустой и пустой коллекции в Java

Я хочу проверить, пуста ли коллекция и null. Может кто-нибудь, пожалуйста, дайте мне знать о лучшей практике.

В настоящее время я проверяю, как показано ниже:

if (null == sampleMap || sampleMap.isEmpty()) {
  // do something
} 
else {
  // do something else
}

Ответ 1

Если вы используете библиотеку Apache Collections в своем проекте, вы можете использовать методы CollectionUtils.isEmpty и MapUtils.isEmpty, которые соответственно проверяют, является ли коллекция или карта пустой или нулевой (то есть они являются "нулевыми" ).

Код, лежащий в основе этих методов, более или менее то, что пользователь @icza написал в своем ответе.

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

Ответ 2

Это лучший способ проверить это. Вы можете написать вспомогательный метод для этого:

public static boolean isNullOrEmpty( final Collection< ? > c ) {
    return c == null || c.isEmpty();
}

public static boolean isNullOrEmpty( final Map< ?, ? > m ) {
    return m == null || m.isEmpty();
}

Ответ 3

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

Ответ 4

Если вы используете рамки Spring, вы можете использовать CollectionUtils для проверки как с коллекциями (List, Array), так и с картой и т.д.

if(CollectionUtils.isEmpty(...)) {...}

Ответ 5

Когда вы используете spring, вы можете использовать

boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);

где obj - любое [map, collection, array, aythink...]

в противном случае: код:

public static boolean isEmpty(Object[] array) {
    return (array == null || array.length == 0);
}

public static boolean isEmpty(Object obj) {
    if (obj == null) {
        return true;
    }

    if (obj.getClass().isArray()) {
        return Array.getLength(obj) == 0;
    }
    if (obj instanceof CharSequence) {
        return ((CharSequence) obj).length() == 0;
    }
    if (obj instanceof Collection) {
        return ((Collection) obj).isEmpty();
    }
    if (obj instanceof Map) {
        return ((Map) obj).isEmpty();
    }

    // else
    return false;
}

для наилучшего String:

boolean isNullOrEmpty = (str==null || str.trim().isEmpty());

Ответ 6

Если вам нужно проверить значение null, это так. Однако, если у вас есть контроль над этим, просто возвращайте пустую коллекцию, когда можете, и проверьте только на пустое позже.

Этот поток о том же, что и в С#, но принципы одинаково хорошо применимы к java. Как упоминалось там, null должен быть возвращен, только если

  • null может означать нечто более конкретное;
  • ваш API (контракт) может заставить вас вернуть null.

Ответ 7

Вы можете использовать org.apache.commons.lang.Validate " notEmpty" метод:

Validate.notEmpty(myCollection) → Проверить, что указанная коллекция аргументов не является ни нулевым, ни нулевым (без элементов); в противном случае выбрасывается исключение.

Ответ 8

Для всех карт mapinclusing используйте метод isEmpty, который есть в этих объектах коллекции. Но вы должны сделать проверку nulkl перед

Карта карты;

........ if (map!= null &! map.isEmpty()) ......