276

コレクションが空かどうかを確認したいのですがnull。誰かが私にベストプラクティスを教えてもらえますか?

現在、私は以下のようにチェックしています:

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

9 に答える 9

414

プロジェクトでApacheCommonsCollectionsライブラリを使用する場合は、コレクションまたはマップがであるかnullであるか(つまり、「nullセーフ」であるか)をそれぞれチェックするメソッドCollectionUtils.isEmptyとメソッドを使用できます。MapUtils.isEmpty()

これらのメソッドの背後にあるコードは、多かれ少なかれユーザー@iczaが彼の回答に書いたものです。

何をするかに関係なく、書くコードが少なければ少ないほど、コードの複雑さが減るにつれてテストする必要のあるコードが少なくなることを忘れないでください。

于 2012-10-04T07:30:59.060 に答える
85

それをチェックする最良の方法です。あなたはそれをするためのヘルパーメソッドを書くことができます:

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

public static boolean isNullOrEmpty( final Map< ?, ? > m ) {
    return m == null || m.isEmpty();
}
于 2012-10-04T05:56:24.020 に答える
50

Springフレームワークを使用しているCollectionUtils場合は、コレクション(リスト、配列)とマップなどの両方に対してチェックするために使用できます。

if(CollectionUtils.isEmpty(...)) {...}
于 2016-12-07T02:32:25.530 に答える
22

個人的には、代わりに空のコレクションを使用することを好みnull、コレクションが空であるかどうかに関係なくアルゴリズムが機能するようにアルゴリズムを機能させます。

于 2012-10-04T05:57:06.920 に答える
15

あなたが春を使うとき、あなたは使うことができます

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

ここで、objは任意の[map、collection、array、aything ...]

それ以外の場合:コードは次のとおりです。

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;
}

文字列の最適なものは次のとおりです。

boolean isNullOrEmpty = (str==null || str.trim().isEmpty());
于 2017-03-06T09:40:32.337 に答える
6

Collectionオブジェクトが空か、nullかどうかを確認します。以下に示すこれらすべてのメソッドは、org.apache.commons.collections4.CollectionUtilsパッケージに含まれています。

リストをチェックするか、コレクションオブジェクトのタイプを設定します。

CollectionUtils.isEmpty(listObject);
CollectionUtils.isNotEmpty(listObject);

オブジェクトのマップタイプを確認してください。

MapUtils.isEmpty(mapObject);
MapUtils.isNotEmpty(mapObject);

すべてのメソッドの戻り型はブール値です。

于 2020-03-18T06:02:23.947 に答える
4

org.apache.commons.lang.Validate's " notEmpty "メソッドを使用できます:

Validate.notEmpty(myCollection)->指定された引数コレクションがnullでもサイズがゼロでもない(要素がない)ことを検証します。それ以外の場合は例外をスローします。

于 2017-08-22T17:25:40.700 に答える
3

nullをチェックする必要がある場合は、それが方法です。ただし、これを制御できる場合は、可能な限り空のコレクションを返し、後で空のコレクションのみをチェックしてください。

このスレッドはC#とほぼ同じですが、原則はJavaにも同様に当てはまります。そこに記載されているように、nullは次の場合にのみ返されます。

  • nullは、より具体的なことを意味する場合があります。
  • API(コントラクト)により、nullを返すように強制される場合があります。
于 2012-10-04T06:03:11.720 に答える
-3

マップを含むすべてのコレクションの場合:isEmptyこれらのコレクションオブジェクトにあるメソッド。ただし、前にnullチェックを実行する必要があります。

Map<String, String> map;

........
if(map!=null && !map.isEmpty())
......
于 2017-09-13T05:08:59.867 に答える