2013-05-03 5 views
62

私は非常に簡単なセットを作成する方法を探しています。.asSet(...)はどのAPIにもありますか?

Arrays.asList("a", "b" ...)Setのための同様のものがありますList<String>

を作成しますか?

+0

可能な複製[Java - 簡単に配列を変換する](http://stackoverflow.com/questions/3064423/java-easily-convert-array-to-set) –

+1

それはない、クレアチン配列のセットと変換は同じではありません – cahen

答えて

19

のJava 8でのサードパーティを必要とせずにこれを行うことができますフレームワーク:

Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet()); 

Collectorsを参照してください。

お楽しみください!

+1

を使用した方が最適なソリューションになる可能性があります。現在Java 8ではサードパーティのライブラリに依存せず、他のコレクション私はこれを受け入れたものとして設定しています。他の偉大なソリューションの皆様に感謝します。 (btw、このセットは変更可能です) – cahen

+0

今、Javaがあまりにも冗長だと言った人はいますか?もちろんこれは最高の答えです! – BobDoolittle

+0

ありがとうございます@BobDoolittle! –

36

あなたは

new HashSet<String>(Arrays.asList("a","b")); 
2

ありませんを使用することができますが、Guavaを使用して、この

new HashSet<String>(Arrays.asList("a", "b", ...)); 
49

のようにそれを行うことができ、それはそれと同じくらい簡単です:

Set<String> mySet = ImmutableSet.<String> of("a", "b"); 

または可変のために設定:

複数のデータ型の場合

は、使用、他の人が言ったようにGuava user guide

+0

これには不変でないバージョンはありますか? – cahen

+3

@cahen yes: 'Sets.newHashSet(" a "、" b ")'または 'Sets.newLinkedHashSet(" a "、" b ")' –

+1

私は答えに変異型を追加しました。 –

14

を使用することができます参照してください。

new HashSet<String>(Arrays.asList("a","b")); 

これがない理由はありませんは、Javaには存在しArrays.asListは、他の言葉で、固定サイズのリストを返すということです。

public static void main(String a[]) 
{ 
    List<String> myList = Arrays.asList("a", "b"); 
    myList.add("c"); 
} 

戻り値:

Exception in thread "main" java.lang.UnsupportedOperationException 
    at java.util.AbstractList.add(Unknown Source) 
    at java.util.AbstractList.add(Unknown Source) 

Arraysクラス内の「固定サイズ」SetのないJDKの実装はありません。なぜこれが欲しいのですか? Setは重複がないことを保証しますが、手動で入力する場合はその機能は必要ありません。Listにはさらに多くのメソッドがあります。両方のインターフェイスは、CollectionIterableを拡張します。それはJDKではありませんので、 - 他の人が言ったように、あなたが本当にこの機能が必要な場合


guavaを使用しています。それに関する情報については、彼らの答え(特にMichaelSchmeißerの答え)を見てください。

+3

Arrays.asList()が実際に何を行うかを指摘するので、これはこれまでのところ最良の答えです。多くの開発者は、Arrays.asList()がjava.util.ArrayListを作成し、実際にはjava.util.Arrays $ ArrayListを作成していると考えているようです(部分的にしか変更できず、基本配列のライブビュー) –

+1

誰かがこれをやりたければ、Set(またはList)を手動で構築する最も一般的な理由は、テスト値を渡すテストクラスにあります。 –

17

ゼロまたは1つのメンバーとセットの特殊なケースでは、あなたが使用することができます。

java.util.Collections.EMPTY_SET 

と:

java.util.Collections.singleton("A") 
+0

これらの特殊なケースでは、標準のjava.util API – arcuri82

0

は、ここでは、Java 9で

/** 
    * Utility method analogous to {@link java.util.Arrays#asList(Object[])} 
    * 
    * @param ts 
    * @param <T> 
    * @return the set of all the parameters given. 
    */ 
    @SafeVarargs 
    @SuppressWarnings("varargs") 
    public static <T> Set<T> asSet(T... ts) { 
    return new HashSet<>(Arrays.asList(ts)); 
    } 
1

を使用することができ、ほとんどの方法ですが、同様の機能は、ファクトリメソッドを経由して追加されました:

Set<String> oneLinerSet = Set.of("a", "b", ...); 

(。Listのための同等物は、同様にあります)