回答:
いいえ、この方法はグアバには存在せず、実際には「アイデア墓地」にあります。
「is nullまたはempty」が、コレクションについて本当に知りたい質問であるとは考えていません。
コレクションが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を呼び出すとすぐにこれを実行してください。そうすれば、無期限に継続させるのではなく、奇妙さを取り戻すことができます。
そして、「本当に空のコレクションを意味するnull」があなたに返されずに渡された場合、あなたの仕事は簡単です:ただNullPointerException
投げられるようにして、その呼び出し元を形作るだけです。
null
です。できるだけ早く空のコレクションに正規化して、あいまいさを取り除いてください。できない場合は、大丈夫です。自分の簡単なisNullOrEmpty(Collection)ヘルパーを本当に作成したいユーザーの1%未満である可能性があります。
if (collection == null || collection.isEmpty())
必要な場合はただ書いてください!そんなに悪いのですか?)
グアバ全体でよく見られる傾向の1つは、null
S に対して非常に拮抗する傾向があるということです。作者null
はあなたがおそらくあなたが使うのと同じくらい使うことを思いとどまらせたいと思っています、そして使いやすくするためにユーティリティメソッドを提供することnull
はこの目的に対して逆効果になります。
Guavaのパラダイムを使用する場合は、このコレクション(または配列)のソースがオプションでを返す必要があるかどうかを検討してnull
ください。そうでない場合は、それ@NonNull
をマークして、ではなく空のコレクションを返すことを検討してくださいnull
。または、値のないnull
リストを予期している関数のパラメーターとして、を使用することを検討してくださいPreconditions.checkNotNull
。これは、null
(予期せずに)が渡された場合に例外をスローします。
null
本当に合法であれば、list == null || list.isEmpty()
それほど難しくはありません。
commons-collectionsにはCollectionUtils.isEmpty()があります。
Spring Frameworkには、という特殊なutilクラスがありCollectionUtils
ます。そして、あなたが探している方法は次のとおりorg.springframework.util.CollectionUtils.isEmpty
です。nullおよび空のコレクションに対してtrueを返します。
配列にはorg.springframework.util.ObjectUtils.isEmpty
、ほぼ同じように動作するメソッドがあります。
Apache CollectionUtils 4には、コレクションがnullの場合に空のリストを返すメソッドCollectionUtils.emptyIfNull()があります。これはforeachループで非常に便利なので、反復する前にnullチェックを行う必要はありません。
私の解決策は:MoreObjects.firstNonNull(list、Collections。emptyList())
JDKコレクションで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);
}
}
Appacheコレクションを見てくださいCollectionUtils.isEmpty()は、コレクションがnullまたは空の場合にtrueを返します