web-dev-qa-db-ja.com

Google Guavaはコレクション用にisNullOrEmptyです

Guavaには文字列用のisNullOrEmptyユーティリティメソッドがあることがわかります

Strings.isNullOrEmpty(str)

リストに類似したものはありますか?何かのようなもの

Lists.isNullOrEmpty(list)

これは次と同等である必要があります

list == null || list.isEmpty()

また、配列についても同様のものはありますか?何かのようなもの

Arrays.isNullOrEmpty(arr)

これは次と同等である必要があります

arr == null || arr.length == 0
101
Ramesh

いいえ、この方法はグアバには存在せず、実際には「アイデアの墓地」にあります。

「nullまたは空」は、コレクションについて本当に聞きたい質問であるとは考えていません。

コレクションがnullである可能性があり、nullを空と同じように処理する必要がある場合は、次のようにすべてのあいまいさを事前に回避してください。

Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
  foos = ImmutableSet.of();
}

またはこのように(必要な場合):

Set<Foo> foos = MoreObjects.firstNonNull(
    NaughtyClass.getFoos(), ImmutableSet.<Foo>of());

その後は、通常どおり.isEmpty()を使用できます。いたずらなAPIを呼び出したらすぐにこれを行い、無期限に続けるのではなく、背後に奇妙さを置きます。

そして、「空のコレクションを実際に意味するヌル」が返されずに渡される場合、あなたの仕事は簡単です。ただNullPointerExceptionを投げさせ、その呼び出し元を形作るだけです。

139

グアバ全体で見つかる傾向があるのは、nullsに対して非常に敵対的である傾向があるということです。作者は、おそらくあなたがnullを使うことを思いとどまらせたいと思っています。そして、nullを使いやすくするユーティリティメソッドを提供することは、この目的に対して逆効果です。

Guavaのパラダイムを使用する場合は、このコレクション(または配列)のソースがオプションでnullを返す必要があるかどうかを検討してください。そうでない場合は、@NonNullとマークし、nullの代わりに空のコレクションを返すことを検討してください。または、null- valuedリストを期待していない関数のパラメーターとして、nullが(予期せず)渡された場合に例外をスローするPreconditions.checkNotNullの使用を検討してください。

nullが本当に正当なものであれば、list == null || list.isEmpty()はそれほど難しくありません。

37
Ray

Commons-collectionsには CollectionUtils.isEmpty() があります。

29

Spring Frameworkには、CollectionUtilsという特殊なutilクラスがあります。探しているメソッドはorg.springframework.util.CollectionUtils.isEmptyです。 nullおよび空のコレクションに対してtrueを返します。

配列の場合、org.springframework.util.ObjectUtils.isEmptyメソッドがあり、ほぼ同じ動作をします。

9
Lukasz

Apache CollectionUtils 4には、コレクションがnullの場合に空のリストを返すメソッド CollectionUtils.emptyIfNull() があります。これはforeachループで非常に役立つため、反復する前にnullチェックを行う必要はありません。

2
Jeffrey

私の解決策は次のとおりです。MoreObjects.firstNonNull(list、Collections。emptyList())

JavaコレクションでGuava MoreObjectsを使用しています。

 @Test
public void listnull() {
List<String> list = null;

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}

list = new ArrayList<String>();
list.add("http://stackoverflow.com/");

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}
}
1
jeton

Appacheコレクションを見るCollectionUtils.isEmpty()は、コレクションがnullまたは空の場合にtrueを返します

0