2010-11-27 12 views
3

標準ライブラリ(apache-commons、guavaなど)には、このようなものがありますか?Canonical toList in java?

public static <T> List<T> toList(Iterable<T> iterable) { 
    if (iterable instanceof List) 
     return (List<T>)iterable; 

    if (iterable instanceof Collection) 
     return new ArrayList<T>((Collection<T>)iterable); 

    List<T> result = new ArrayList<T>(); 
    for (T item : iterable) 
     result.add(item); 

    return result; 
} 
+0

3行のコードを置き換えるライブラリを探しているのはなぜですか? –

+0

@Peter - 特別な理由はありません。しかし、それは私が別のプロジェクトで何度も繰り返し書いているコードなので、どこかに存在すれば知りたいです。 – ripper234

+0

いずれかのクラスにユーティリティ関数( 'static')を作成します。 –

答えて

9

あなたの実装は2つの役割を果たしていたので、私は、そうは思わない:

  • 引数がリストである場合は、それはそれを返します。したがって、返されるリストは引数の「ライブビュー」になります。各リストの変更は、他のリストにも表示されます。
  • 引数がリストでない場合は、その引数のコピーを返します。返されるリストは、引数から独立しています。

これらの2つのものは非常に異なっているため、汎用の汎用ライブラリでは1つの方法でそれらを一緒にスローできません。

+0

非常に良い答えです(Jon Skeetの削除された答えと同じです)。私はそのような方法の必要性を理解することができますが、その意味はひどいでしょう。 –

+0

私はまだ削除された回答が見えないとは思いません。 http://meta.stackexchange.com/questions/71045/feature-request-see-deleted-posts – ripper234

+2

グアバにはこれを含めないというだけの理由があります。 –