Javaでnullおよび空のコレクションを検証するためのベストプラクティス


209

コレクションが空かどうかを確認したいnull。誰か私にベストプラクティスを教えてくださいませんか?

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

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

10
他のことは別にして、ではなく使用する理由について考えてください。ほとんどの人は後者がより読みやすいと感じています-前者は他の言語からのホールドオーバーです。null == sampleMapsampleMap == null
Jon Skeet、2012年

6
ちなみにnullコレクションは悪いです。可能であれば、代わりに空のコレクションにします。 See Effective Java: Item 43 - Return empty arrays or collections, not nulls.
卢声远Shengyuan Lu

@JonSkeetの人々は、==の代わりに=を書く場合にnull == sampleMapを使用します。sampleMap == nullを使用する場合、1つ=を忘れると、それはsampleMap = nullとなり、エラーを発生させないため、別の方法で書き込むと、開発者が見やすくなります
Uri Loya

1
@UriLoya:if (null = sampleMap)Javaで作成すると、コンパイルエラーが発生します。それがまさに私の最初のコメントのポイントです。その「理由」は言語固有ですが、人々がなぜそうしているのを考慮していないため、読みやすさのペナルティはあるものの、他の言語にも波及しています。
Jon Skeet、

org.apache.commons.collections4.CollectionUtilsパッケージにあるCollectionUtilsクラスを使用できます。空またはnullを見つけるためのユーティリティメソッドは多数あります。
vikash

回答:


312

あなたが使用している場合はApache Commonsのコレクションプロジェクトにライブラリを、あなたが使用することCollectionUtils.isEmptyMapUtils.isEmpty()、コレクションやマップがある場合は、それぞれチェック方法またはヌルを(彼らは「ヌル・安全」ですIE)。

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

何をするかに関係なく、作成するコードが少ないほど、コードの複雑さが減少するため、テストする必要のあるコードが少なくなることに注意してください。


1
おかげMapUtils.isEmptyは、マップを確認するための完璧なソリューションがnullまたは空である
ナラヤンYerrabachu

23
名前が付けられていないのは残念ですisNullOrEmpty
Scadge

72

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

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

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

同様の機能も必要Map<?>です。
Luiggi Mendoza

1
もちろん、地図用にも追加できますが、タイトルにはコレクションが記載されています。
icza 2012年

1
mがnullの場合、.isEmpty()がNullPointerExceptionを発生させますか?それ以外の場合、左側(m == null)がtrueの場合、残りはチェックされません
Ismail Sahin

4
@ismail ||演算子は短絡演算子です。つまり、左のオペランドがの場合、右のオペランドはtrue評価されません。したがって、の場合m == nullm.isEmpty()呼び出されません(必要ない場合、結果はtrue)。
icza

完璧なソリューション@icza
gaurav

32

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

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

たぶん、あなたはマップのMapUtils.isEmpty()について話しますが、すべてのコレクションについてではありませんか?
Pavlo Chechehov

21

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


10

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

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());

3

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

このスレッドはC#とほぼ同じですが、原則はJavaにも等しく適用されます。そこに言及されているように、nullは

  • nullはより具体的なものを意味する場合があります。
  • API(契約)により、nullを返すように強制される場合があります。

3

org.apache.commons.lang.Validateの「notEmpty」メソッドを使用できます。

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


1

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

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

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

オブジェクトのマップタイプを確認します。

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

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


-1

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

Map<String, String> map;

........
if(map!=null && !map.isEmpty())
......
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.