変換した配列をリストにJava
-
25-09-2019 - |
解決
おばかりできるのではないのリストがプリミティブタイプです。つまり、 List<int>
はできません。
できとして List<Integer>
を使用 Integer
クラスのロッドやルアーを使用することに int
プリミティブ.換された配列へ List
の Arrays.asList
ユーティリティメソッド.
Integer[] spam = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(spam);
他のヒント
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 つの方法で使用:
List.copyOf(Arrays.asList(integers))
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 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});
グアバの使用:
Integer[] array = { 1, 2, 3}; List<Integer> list = Lists.newArrayList(sourceArray);
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);