2013-07-03 1 views
5

私は、引数がCollection<Foo> foosでNULLになる可能性があります。私は入力のローカルコピーをImmutableSetとしたいと思います。今すぐコードは次のようになります:可能性のあるnullのコレクションを処理するためのGuavaの方法を

if (foos == null) 
{ 
    this.foos = ImmutableSet.of(); 
} 
else 
{ 
    this.foos = ImmutableSet.copyOf(foos); 
} 

これを行うにはもっとクリーンな方法がありますか? foosが単純なパラメータの場合、私はObjects.firstNonNull(foos, Optional.of())のようなことをすることができましたが、コレクションのコレクションに類似したものがあるかどうかはわかりません。

答えて

13

あなたがObjects.firstNonNullを使用することができなかった理由を私は見ていない:

this.foos = ImmutableSet.copyOf(Objects.firstNonNull(foos, ImmutableSet.of())); 

それはあなたのものだ場合は、静的な輸入品で、いくつかの入力を保存することができます:

import static com.google.common.collect.ImmutableSet.copyOf; 
import static com.google.common.collect.ImmutableSet.of; 
// snip... 
this.foos = copyOf(Objects.firstNonNull(foos, of())); 
+5

+1 'copyOf'は、' ImmutableSet'の場合、単に入力を返すだけで十分だと指摘しておく価値があります。 –

+1

@PaulBellora私はあなたがたった今信じています。 ':)' –

+3

また 'ImmutableSet。残念ながら of() 'が必要な場合があります。 –

7

Collectionは、他の類似の参照であるので、あなたが行うことができます:

ImmutableSet.copyOf(Optional.fromNullable(foos).or(ImmutableSet.of())); 

しかし、それはかなりの一握りを書くことになってきています。もっとシンプル:

foos == null ? ImmutableSet.of() : ImmutableSet.copyOf(foos); 
+0

2番目の例は、空のコレクションが必要ないときは作成しないという利点があります。 MattBallの答えは、渡されたコレクションがnullでなくても常に空の 'Set'を作成します。 –

+5

@JohnB 'ImmutableSet.of()' [シングルトンを返します](http://docs.guava-libraries.googlecode.com/git/javadoc/src-html/com/google/common/collect/ImmutableSet.html# 83行目)。 –

+0

ああ、もちろんです!乾杯。 –

関連する問題