web-dev-qa-db-ja.com

KotlinでList <T>を初期化する方法は?

Kotlinには List<out E> コレクションがありますが、これを初期化する方法がわかりません。 Javaでは、次のように書くことができます。

List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");

Kotlinで同じことをどのように達成できますか?

53
Ali Dehghani

listOf 救助のためのトップレベル関数:

val geeks = listOf("Fowler", "Beck", "Evans")
88
Ilya

さらに情報を追加するために、KotlinはListMutableListで初期化できる不変のlistOfmutableListOfの両方を提供します。コレクションに関してKotlinが提供するものに興味がある場合は、 Collections の公式リファレンスドキュメントにアクセスできます。

11
gmariotti

Ilyagmariotti による賛成の回答はどちらも適切で正しいです。しかし、いくつかの代替案はコメントで広がっており、いくつかはまったく言及されていません。

この回答には、すでに説明されているものの概要と、明確​​化およびその他のいくつかの選択肢が含まれています。

不変リスト( List

不変リスト、または読み取り専用リストは、要素を追加または削除できないリストです。

  • Ilyaが指摘しているように、 listOf() はあなたが望むことをしばしばします。これにより、Javaの Arrays.asList と同様の不変リストが作成されます。
  • frogcoder はコメントで述べているように、 emptyList() は同じことをしますが、当然空のリストを返します。
  • listOfNotNull() は、すべてのnull要素を除外した不変リストを返します。

可変リスト( MutableList

可変リストには、要素を追加または削除できます。

  • gmariottiは mutableListOf() を使用することをお勧めします。これは通常、リストに要素を追加または削除する必要がある場合に必要なものです。
  • Greg T は代替を提供します arrayListOf() 。これにより、変更可能な ArrayList が作成されます。本当にArrayListの実装が必要な場合は、mutableListOf()でこれを使用してください。
  • 他の List 実装では、便利な関数はありません。たとえば、val list = LinkedList<String>()として初期化できます。それは、コンストラクターを呼び出してオブジェクトを作成するだけです。これは、たとえば LinkedList の実装が本当に必要な場合にのみ使用してください。
7
Magnilex

いくつかのユースケースを説明しましょう:アイテムを初期化する不変(変更不可)リストを作成しましょう:

val myList = listOf("one" , "two" , "three")

フィールドを初期化する可変(変更可能)リストを作成しましょう:

val myList = mutableListOf("one" , "two" , "three")

不変(変更不可)を宣言して、インスタンス化しましょう:

lateinit var myList : List<String>
// and then in the code :
myList = listOf("one" , "two" , "three")

最後に、それぞれにいくつかの追加項目を追加します。

val myList = listOf("one" , "two" , "three")
myList.add() //Unresolved reference : add, no add method here as it is non mutable 

val myMutableList = mutableListOf("one" , "two" , "three")
myMutableList.add("four") // it's ok 
4
CodeRanger