質問

どんなに変換する配列リストにJava?

を使用した Arrays.asList() その挙動(署名)からJava SE 1.4.2 (docs現在、アーカイブ) 8 もぐさんのwebをご利用1.4.2活動しています。

例えば:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • に1.4.2リストを返す要素が1,2,3
  • に1.5.0+を含むlistを返します。配列の迷惑メール

多くの場合で検出するもので滑りぬ:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
役に立ちましたか?

解決

おばかりできるのではないのリストがプリミティブタイプです。つまり、 List<int> はできません。

できとして List<Integer> を使用 Integer クラスのロッドやルアーを使用することに int プリミティブ.換された配列へ ListArrays.asList ユーティリティメソッド.

Integer[] spam = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(spam);

この コードの実行生IdeOne.com.

他のヒント

Javaの8では、ストリームを使用することができます:

int[] spam = new int[] { 1, 2, 3 };
Arrays.stream(spam)
      .boxed()
      .collect(Collectors.toList());

変換方法について言えば、それはあなたがあなたのListを必要としない理由に依存します。 あなたがそれを必要とする場合は、単にデータを読み出します。 OK、ここに行く:

Integer[] values = { 1, 3, 7 };
List<Integer> list = Arrays.asList(values);

しかし、その後、あなたがこのような何かをすればます:

list.add(1);

あなたはjava.lang.UnsupportedOperationExceptionを取得します。 だから、いくつかのケースのためにあなたも、これを必要があります。

Integer[] values = { 1, 3, 7 };
List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));

最初のアプローチは、実際には配列を変換するが、Listのようにそれを「は」ありません。しかし、アレイ要素の固定数のようなすべての特性を備えたフードの下です。あなたがArrayListを構築する際に型を指定する必要がありますのでご注意ください。

問題は、可変引数がJava5で導入されてしまったと、残念ながら、Arrays.asList()があまりにも可変引数バージョンで過負荷しまったということです。 Arrays.asList(spam)は、INTアレイの可変引数パラメータとしてJava5コンパイラによって理解されるようにします。

この問題は、効果的なJavaの第2版では、より詳細に説明されている。第7章、項目42。

少し遅れたようですが、ここに私の 2 セントがあります。私たちにはありえない List<int> として int はプリミティブ型なので、 List<Integer>.

Java 8 (int 配列)

int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList()); 

Java 8 以下 (整数配列)

Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 =  Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only

List ではなく ArrayList が必要ですか?

特定の実装が必要な場合は、 List 例えば ArrayList それなら使えます toCollection として:

ArrayList<Integer> list24 = Arrays.stream(integers)
                          .collect(Collectors.toCollection(ArrayList::new));

なぜ list21 構造的に変えることはできないのでしょうか?

使用するとき Arrays.asList 返されるリストは固定ではないため、返されるリストのサイズは固定されています。 java.util.ArrayList, 、ただし内部で定義されたプライベート静的クラス java.util.Arrays. 。したがって、返されたリストに要素を追加または削除すると、 UnsupportedOperationException 投げられるだろう。だから私たちは一緒に行くべきです list22 リストを変更したいとき。Java8 がある場合は、これを使用することもできます。 list23.

はっきり言って list21 を呼び出すことができるという意味で変更できます list21.set(index,element) ただし、このリストは構造的に変更することはできません。つまり、リストに要素を追加または削除することはできません。こちらもチェックできます 質問.


不変のリストが必要な場合は、次のようにラップできます。

List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));

もう一つ注意すべき点は、その方法です。 Collections.unmodifiableList 指定されたリストの変更不可能なビューを返します。変更不可能なビュー コレクションは、変更不可能なコレクションであり、バッキング コレクションのビューでもあります。バッキング コレクションへの変更は引き続き可能であり、変更が行われた場合は、変更不可能なビューを通じて表示されることに注意してください。

Java 10 では真に不変のリストを作成できます。

Java 10 (真に不変リスト) を 2 つの方法で使用:

  1. List.copyOf(Arrays.asList(integers))
  2. Arrays.stream(integers).collect(Collectors.toUnmodifiableList());

こちらもチェック 答え もっと私のものを。

私は最近、配列をリストに変換する必要がありました。その後、プログラムにデータを削除しようとするリストを濾過しました。あなたはは、Arrays.asList(配列)機能を使用するときは、固定サイズのコレクションを作成する:あなたは、どちらも追加もなく、削除することができます。このエントリは、より良い私ができるよりも、問題を説明します。一覧にはから要素を削除しようとすると、なぜ私はUnsupportedOperationExceptionを入手できます。

最後に、私は「手動」の変換をしなければならなかった。

    List<ListItem> items = new ArrayList<ListItem>();
    for (ListItem item: itemsArray) {
        items.add(item);
    }

私は配列からList.addAll(アイテム)オペレーションを使用して、リストへの変換を追加したかもしれないと仮定する。

でさえ短います:

List<Integer> list = Arrays.asList(1, 2, 3, 4);

配列の使用

これは配列を次のように変換する最も簡単な方法です。 List. 。ただし、リストから新しい要素を追加したり、既存の要素を削除しようとすると、 UnsupportedOperationException 投げられるだろう。

Integer[] existingArray = {1, 2, 3};
List<Integer> list1 = Arrays.asList(existingArray);
List<Integer> list2 = Arrays.asList(1, 2, 3);

// WARNING:
list2.add(1);     // Unsupported operation!
list2.remove(1);  // Unsupported operation!

ArrayList またはその他のリスト実装の使用

を使用できます for 配列のすべての要素をループに追加します。 List 実装、例: ArrayList:

List<Integer> list = new ArrayList<>();
for (int i : new int[]{1, 2, 3}) {
  list.add(i);
}

Java 8 でのストリーム API の使用

配列をストリームに変換し、さまざまなコレクターを使用してストリームを収集できます。Java 8 でのデフォルトのコレクターの使用 ArrayList 画面の背後にありますが、好みの実装を強制することもできます。

List<Integer> list1, list2, list3;
list1 = Stream.of(1, 2, 3).collect(Collectors.toList());
list2 = Stream.of(1, 2, 3).collect(Collectors.toCollection(ArrayList::new));
list3 = Stream.of(1, 2, 3).collect(Collectors.toCollection(LinkedList::new));

以下も参照してください。

他の回避策をご利用の場合apache commons-lang:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(ArrayUtils.toObject(spam));

場所 ArrayUtils.toObject に変換します int[]Integer[]

Java 9 では、新しいコンビニエンス ファクトリ メソッドを介して不変リストを使用する、さらに洗練されたソリューションが提供されます。 List.of:

List<String> immutableList = List.of("one","two","three");

(恥ずかしげもなくコピペしたもの ここ )

あなたが(またはそれ以降)は、Java 8をターゲットにしている場合、あなたはこれを試すことができます:

int[] numbers = new int[] {1, 2, 3, 4};
List<Integer> integers = Arrays.stream(numbers)
                        .boxed().collect(Collectors.<Integer>toList());

注:

Collectors.<Integer>toList()に注意して、この一般的な方法は、エラーを回避するのに役立ちます「型の不一致を:List<Object>List<Integer>から変換することはできません」。

あなたは配列にしてキャストする必要があります。

Arrays.asList((Object[]) array)

ワンライナーます:

List<Integer> list = Arrays.asList(new Integer[] {1, 2, 3, 4});
  1. グアバの使用:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = Lists.newArrayList(sourceArray);
    
  2. Apache Commons Collection の使用:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = new ArrayList<>(6);
    CollectionUtils.addAll(list, array);
    

したがって、それは試しているJavaのバージョンによって異なります-

Java 7

 Arrays.asList(1, 2, 3);

または

       final String arr[] = new String[] { "G", "E", "E", "K" };
       final List<String> initialList = new ArrayList<String>() {{
           add("C");
           add("O");
           add("D");
           add("I");
           add("N");
       }};

       // Elements of the array are appended at the end
       Collections.addAll(initialList, arr);

または

Integer[] arr = new Integer[] { 1, 2, 3 };
Arrays.asList(arr);

Java 8では

int[] num = new int[] {1, 2, 3};
List<Integer> list = Arrays.stream(num)
                        .boxed().collect(Collectors.<Integer>toList())

参照 - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/

このことができます場合は、

:私は同じ問題を抱えていたし、単純に配列を取り、同じ内容で同じ型のArrayListのを返す汎用関数を書いてきます:

public static <T> ArrayList<T> ArrayToArrayList(T[] array) {
    ArrayList<T> list = new ArrayList<T>();
    for(T elmt : array) list.add(elmt);
    return list;
}

指定された配列:

    int[] givenArray = {2,2,3,3,4,5};

整数配列を整数リストに変換する

一方通行:boxed() -> IntStream を返します

    List<Integer> givenIntArray1 = Arrays.stream(givenArray)
                                  .boxed()
                                  .collect(Collectors.toList());

2 番目の方法:ストリームの各要素を整数にマップしてから収集します

注記: mapToObj を使用すると、i を (char)i に変換することで、各 int 要素を文字列ストリーム、char ストリームなどに変換できます。

    List<Integer> givenIntArray2 = Arrays.stream(givenArray)
                                         .mapToObj(i->i)
                                         .collect(Collectors.toList());

ある配列型を別の型に変換する例:

List<Character> givenIntArray2 = Arrays.stream(givenArray)
                                             .mapToObj(i->(char)i)
                                             .collect(Collectors.toList());
あなたは整数値でそれを使用する場合は、

はリストに変換アレイに2つのコード行を使用します あなたは、プリミティブデータ型のオートボクシングタイプを使用する必要があります。

  Integer [] arr={1,2};
  Arrays.asList(arr);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top