今回は「Listの使い方」についてです。
Listの特徴
Listの特徴は以下の2つですね。
- 順序がある
- 値の重複はOK
ちなみに、そもそもListやSetの概念がよくわかってないという方はこちらの解説をのぞいてみてください。
Listの使い方
Listの使い方を以下の3ステップで解説します。
- Listの宣言
- 値の入れる
- 値の取り出す
1. Listを宣言しよう
Listはデータ型を<>で囲って宣言してあげます。
ここではListの宣言方法を2通りご紹介。
/**********
**Listの宣言方法
**********/
//宣言方法① 要素を入れるリストを生成
List<String> fruitList1 = new List<String>();
//宣言方法① 要素を入れるリストを生成(要素数をあらかじめ指定)
List<String> fruitList2 = new String[5];
1つ目が最もオーソドックス?な宣言方法です。
2つ目は、あらかじめ追加できる要素数を指定してあげる方法です。この例でいくと、要素は5つまでしか追加できないことになります。
このような場合、5つしか要素が入る”箱”を用意していないので、6個も7個も要素を入れようとするとエラーになってしまいます。
2. Listに値を入れよう
次は、先ほど宣言したListに要素を追加していきます。
ここでは以下の4つの方法を使ってListに要素を追加していきます。
- addメソッドを使用
- 「add(要素)」の形にしてあげることで、Listに要素を追加できる。要素は後ろに追加されていく
- 要素の位置を指定
- 「List[要素を追加したい位置]」の形にし、位置を指定して追加できる
- List宣言時に追加
- List宣言時にSOQLの結果を追加
/**********
**①addメソッドを使用して追加
**********/
List<String> fruitList1 = new List<String>();
//要素を追加
fruitList1.add('リンゴ');
fruitList1.add('ミカン');
fruitList1.add('リンゴ');
fruitList1.add('モモ');
fruitList1.add('ブドウ');
//リストの中身の確認
system.debug('fruitList1の中身:' + fruitList1);
/**********
**②要素の位置を指定して追加
**********/
List<String> fruitList2 = new String[5];
//位置を指定して要素を追加
fruitList2[0] = 'リンゴ';
fruitList2[3] = 'ミカン';
fruitList2[1] = 'リンゴ';
fruitList2[2] = 'モモ';
fruitList2[4] = 'ブドウ';
//リストの中身の確認
system.debug('fruitList2の中身:' + fruitList2);
/**********
**③宣言時に要素を追加
**********/
List<String> fruitList3 = new List<String>{'リンゴ', 'ミカン', 'リンゴ', 'モモ', 'ブドウ'};
//リストの中身の確認
system.debug('fruitList3の中身:' + fruitList3);
/**********
**④宣言時にSOQLの結果を追加
**********/
List<Account> accList = [Select Id, Name From Account Limit 3];
//リストの中身の確認
system.debug('accListの中身:' + accList);
「fruitList1」、「fruitList2」、「fruitList3」、「accList」の中身をそれぞれ確認すると、
「fruitList1」と「fruitList3」は追加した順番通りに要素が格納されていますね。
「fruitList2」には、指定した位置にそれぞれの要素が追加されていることが分かります。
そして、「accList」にはSOQLで抽出してきたAccountのレコードが格納されていますね。
3. Listの値を取り出そう
それではListに入れた値を以下の方法で取り出してみましょう。
- getメソッドを使用
- 「get(要素番号)」の形。指定した位置の要素を取得できる
- for文を使用
- for文を使用し、要素を1つずつ取り出す
getメソッドの注意点としては、Listの要素番号は「0」始まりだということです。つまり、前から2番目の要素を抽出したければ、「get(1)」と書いてあげる必要があります。
/**********
**①getメソッドを使用して取り出し
**********/
List<String> fruitList1 = new List<String>();
//要素を追加
fruitList1.add('リンゴ');
fruitList1.add('ミカン');
fruitList1.add('リンゴ');
fruitList1.add('モモ');
fruitList1.add('ブドウ');
//4番目の要素を取得
String fruit = fruitList1.get(3);
//取得結果の確認
system.debug('fruitList1の前から4番目の要素:' + fruit);
/**********
**②for文を使用して取り出し
**********/
List<Account> accList = [Select Id, Name From Account Limit 3];
//1つずつ要素を回して取り出す
for(Account acc : accList){
//取得結果の確認
system.debug('accListの要素:' + acc);
}
それでは取得した結果を確認してみます。
1つ目の方法では、fruitList1の前から4番目(要素番号でいうと3)の要素を取得しているので、「モモ」が取れています。
2つ目のfor文を使用した方法では、accListに入っているAccountレコードを1つずつ取り出していることが分かりますね。
Listのメソッド
以下、Listで使用可能なメソッドです。
それぞれの使い方は公式レファレンスをのぞいてみてください。
No | メソッド | 説明 |
---|---|---|
1 | add(listElement) | リストの最後に要素を追加する。 |
2 | add(index, listElement) | 要素をリストの指定されたインデックスの位置に挿入する。 |
3 | addAll(fromList) | 指定されたリストのすべての要素を、メソッドをコールするリストに追加する。両方のリストは同じデータ型である必要がある。 |
4 | addAll(fromSet) | 指定されたセットのすべての要素を、メソッドをコールするリストに追加する。セットとリストのデータ型は同じである必要がある。 |
5 | clear() | すべての要素をリストから削除し、続いてリストの長さを 0 に設定する。 |
6 | clone() | リストの重複コピーを作成する。 |
7 | contains(listElement) | リストに指定した要素が存在する場合、true を返す。 |
8 | deepClone(preserveId, preserveReadonlyTimestamps, preserveAutonumber) | sObject レコード自体を含む、sObject レコードのリストの重複コピーを作成する。 |
9 | equals(list2) | このリストと指定されたリストを比較し、両方のリストが等しい場合は true を返し、そうでない場合は false を返す。 |
10 | get(index) | 指定されたインデックスに保存されたリスト要素を返す。 |
11 | getSObjectType() | sObject のリストを構成する sObject データ型のトークンを返す。 |
12 | hashCode() | このリストおよびコンテンツに対応する hashcode を返す。 |
13 | indexOf(listElement) | このリストの指定した要素が最初に発生したインデックスを返します。このリストに要素が含まれていない場合、-1 を返す。 |
14 | isEmpty() | このリストのイテレータのインスタンスを返す。 |
15 | iterator() | 対応付けのキー-値のペアの数を返す。 |
16 | remove(index) | 指定されたインデックスに保存されたリスト要素を削除し、削除された要素を返す。 |
17 | set(index, listElement) | 特定のインデックスの要素に指定された値を設定する。 |
18 | size() | リストの要素の数を返す。 |
19 | sort() | リスト内の項目を昇順で並び替える。 |
20 | toString() | リストの文字列表現を返す。 |
まとめ
今回は、「Listの使い方」について解説しました。
Listと同じく「コレクション」に分類されている「Set」と「Map」に関しては、以下記事にまとめていますので、ぜひこちらもご覧ください。
コメント