@Jaredラッセルは、このことを指摘したようにGuavaがあなたのコードにどのように役立つかを示す最良の標本ではありません。 immutable lists私はここで使用している2つのグァバのものがある
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
public class Question6842887 {
public static void main(String[] args) {
Builder<Integer> builder = ImmutableList.builder();
for (int i = 1; i < 6; i++) {
builder.add(i);
}
ImmutableList<Integer> list = builder.build();
System.out.println(Joiner.on(System.getProperty("line.separator")).join(list));
}
と:あなただけのグアバは、このコードにその方法を見つけることができる方法のデモンストレーションを探しているなら、ここでのショットだ、と述べた
joiner。
これはおそらく通常、不変式リストが必要な状況ではありませんが、無関係に使用することをお勧めします。不変なコレクション(そして本当に不変なオブジェクト)の大きな利点は、それらがスレッドセーフであることです。防御的なコピーを作成する必要はありません。また、内容を変更した後、変更を心配する必要はありません。あなたは単に自由にそれを渡すことができます、またはそれをキャッシュし、その不変性について幸せで安全です。不変性の対象の詳細については、Effective Javaアイテム15を参照してください。
私がここでデモしている他のGuavaクラスは、Joinerです。ジョイナーは、セパレータを使用して文字列のコレクションを一緒に押し込む、素敵で簡単な方法です。かなりカスタマイズ可能で、ヌルとどのセパレータを使いたいのかを指定することができます。この場合、私はセパレータとしてSystem.getProperty("line.separator")
を指定しました。代わりに", "
などを使用することもできます。また、私はImmutableListにnull値がないことを知っているので、nullを扱わないことを選択しました。ただし、リストにNULL値が含まれる可能性がある場合は、skipNulls
またはuseForNull
のようなオプションを選択できます。
Guavaの次のリリースでは、Rangeがサポートされる予定です。これはあなたのリスト構築を簡略化するために使用することができますContiguousSet<Integer> list = Ranges.closedOpen(1, 6).asSet(DiscreteDomains.integers());
私はそれをお勧めしませんが、あなたのプログラム全体が1行になる可能性があります。
出典
2011-07-27 13:01:32
Ray
とJared Russell ... Guavaを使用すると、通常のJava Collectionsと比べてより高速に繰り返し処理できます...(for Iterator itr = appCodeCombos.iterator(); itr.hasNext();) – Enosh
パフォーマンスは期待できません明示的イテレータを使用してforループに対する "forループの強化"の恩恵を受ける悪意を持って遅い 'System.out.println'の呼び出しが1回しかないので、' Joiner'ソリューションは少し速くなると私は期待しています(ベンチマークしませんでした)。 – Ray
Googleコレクションを使用すると、マイクロ秒で高速に実行されても、問題なく実行されるコードが高速になります – Enosh