36

Javaコアライブラリまたは他の一般的に使用される依存関係(できればApacheの1つ)で、次のことを行う静的メソッドを探しています。

public static <T> Collection<T> wrap(final T object){
    final Collection<T> collection = new ArrayList<T>();
    collection.add(object);
    return collection;
}

そのような方法がすでに存在する場所を知っていますか? 問題は一般的だと思うので、その解決策を複製したくありません。

4

5 に答える 5

66

java.util.Collections.singleton(object)不変の を提供しますSetsingletonListも利用できます。

効率java.util.Arrays.asList(object)が悪いと、ミュータブル ( を使用できますlist.set(0, x);) になりますが、構造的に変更できません (追加または削除できません) List。クライアント側で作成される追加の配列があるため、少し高価です。

于 2012-04-11T12:24:16.997 に答える
14

Java 8 の時点で、Java オブジェクトを List にラップする効率的な方法を次に示します。

コレクション。singletonList : 1.3 以降の単一アイテム、不変。
Collections.singletonList( object )
内部クラスに裏打ちされたハイパフォーマンス。

コレクション。nCopies : 1.2 以降、1 つのオブジェクト、ゼロから多数のアイテム、不変。
Collections.nCopies( number_of_copy, object )
内部クラスに裏打ちされたハイパフォーマンス。すべてのアイテムが同じオブジェクトを指しています。

配列。asList : 任意の数のオブジェクト、サイズ不変 (個々の要素は変更可能)、1.2 以降。
Arrays.asList( object1, object2, object3 )
内部クラスに支えられています。アイテムはコンパイル時に配列に変換され、この配列はリストを直接バックアップします。

new ArrayList(Collection) : 任意の数のオブジェクト、変更可能、1.2 以降
new ArrayList<>( Arrays.asList( object1, object2, object3 ) )
ArrayList は配列 clone配列 copyで作成されるため、ループは使用しません。

于 2015-03-10T10:59:44.227 に答える
2

グアバの不変リスト

public static <E> ImmutableList<E> of(E element)

単一の要素を含む変更できないリストを返します。このリストは、Collections.singleton(T) と同様に動作および実行しますが、null 要素を受け入れません。これは、主にコードの一貫性と保守性のために推奨されます。

于 2012-04-11T12:23:13.970 に答える
1

java.util.Collections.singletonList() または singleton()。ただし、結果は不変であることに注意してください。

于 2012-04-11T12:25:05.703 に答える
1

自分で何かを書くことを恐れないでください。私の知る限り、それは存在しません。この理由は、ユーティリティ メソッドが Collection のどの実装を使用するかを決定するためだと思います。あなたの場合、ArrayList を選択しましたが、他にもたくさんのコレクションがあります。

于 2012-04-11T12:22:19.910 に答える