Developer

ApexのList,Map,Setの使い方を徹底解説!【Salesforce】

Developer
この記事は約5分で読めます。

こんにちは、アンダーソンです。
今回は基礎的な知識ですが、しっかり抑えておかないといけない、
Apexにおけるコレクション型について解説をしていきます。

サンプルコードと一緒にデバッグをした内容も載せていますので、
是非参考にしてみてください。

スポンサーリンク

Listの使い方

Listはいわゆる配列です。
特徴としては、0番目から順番に配置されていきます。
要素はプリミティブ型(StringやIntegerやId)やsObject型などを入れることができます。
値の重複も許される、基本的なコレクション型です。

List<String> hogeList = new List<String>(); //hogeListというString型のListを宣言&初期化

hogeList.add('b'); //bという値を代入
hogeList.add(0,'a'); // 0番目にaという値を代入

system.debug(hogeList); //この時点での中身を見てみる

List<String> piyoList = new List<String>(); //piyoListというString型のListを宣言&初期化

piyoList.addAll(hogeList); //piyoListにhogeListの中身を全部追加
system.debug('想定はtrue--------'+piyoList.contains('a')); //piyoListはaを含んでいるか
system.debug('想定はb--------'+piyoList.get(1)); //piyoListの2番目の文字は?
system.debug('想定は2--------'+piyoList.size()); //piyoListはいくつ文字列がある?
スクリーンショット 2019-09-19 22.16.06.png

.addは追加するindexを決めることもできます。
今回の場合だと、最初にbがあるけどその前の0番目にaを追加したので
並びがa,bになっています、意図して並べ替えをしたい時に使いましょう。
size()なんかはループを回したりする際に使ったり、一つでも配列の要素があれば
何か動作を実行するなんて時に使ったりできます。

またsObject型のリストでは直接SOQLを書いて結果を入れることもできます。

List<Account> accList = [SELECT Id, Name FROM Account LIMIT 10];

system.debug(accList);

この場合、Listの初期化をすることなく、直接SOQLで値を代入することができます。
上記の例であれば10件だけ取引先のIdとNameを取得しています。
一番使うことが多い型なので基本的な使い方はしっかり抑えておきましょう。

公式のリファレンスはこちらからどうぞ

Mapの使い方

Mapは日本語では対応付けという呼び方をしたりします。
大きな特徴はkeyとvalueがセットになっているということです。
例えば0というkeyに対してaという値を入れておくということができます。
keyやvalueはプリミティブ型、コレクション(Listなど)でも大丈夫ですし、
MapのvalueにMapを入れておいたりなんてこともできます。

では実際のコードを見ていきましょう。

Map<Integer, String> hogeMap = new Map<Integer, String>(); //宣言&初期化

hogeMap.put(0,'a'); //key=0,value=a →0=a
hogeMap.put(1,'b'); //key=1,value=b →1=b
hogeMap.put(2,'c'); //key=2,value=c →2=c

system.debug(hogeMap);
system.debug('想定は0.1.2--------' + hogeMap.keySet()); //keyの値を全部取り出す
system.debug('想定はa.b.c--------' + hogeMap.values()); //valueの値を全部取り出す

hogeMap.remove(1); //Mapの2番目の値を除去する
system.debug(hogeMap);
system.debug('想定は0.2--------' + hogeMap.keySet()); //keyの値を全部取り出す
system.debug('想定はa.c--------' + hogeMap.values()); //valueの値を全部取り出す
スクリーンショット 2019-09-19 22.27.26.png

これはかなり基本的な使い方です。
上記の中の値を出すときはhogeMap.get(‘0’)としてあげると『a』が返ってきます。
MapもまたSOQLの結果をそのまま入れて使うことができます。

Map<Id,Account> accMap= new Map<Id,Account>([SELECT Id, Name FROM Account LIMIT 10]);

system.debug(accMap);

IdをkeyにしてAccountというsObject型がvalueのMapが簡単に作成できます。
Mapではkeyは一意なので、重複が確認された時点であとで追加されたvalueに上書きされるので注意しましょう。
SalesforceではIdは完全に一意なのでMapのkeyとしては間違い無いですね。

公式のリファレンスはこちらからどうぞ

Setの使い方

SetはListに似ていますが、順序などはなく、値の重複も許されていません。
重複が許されない値(Idなど)を入れておくのに最適です。
下記サンプルコードです。

Set<String> hogeSet = new Set<String>(); //宣言&初期化

hogeSet.add('a'); //aを追加
hogeSet.add('b'); //bを追加
hogeSet.add('c'); //cを追加
hogeSet.add('a'); //aを追加 先に追加しているので追加されないはず。

system.debug('想定はa.b.c--------' + hogeSet); //4つめのaは無い
system.debug('想定は3--------' + hogeSet.size()); //サイズは4つめがないので3
スクリーンショット 2019-09-19 22.33.26.png

ListやMapと同じくもちろんsObject型も使えますので
必要に応じて使い分けていきましょう。

公式のリファレンスはこちらからどうぞ

まとめ

簡単ではありますが、それぞれのコレクション型の使い方をまとめました。
他にも便利な使い方はありますのでコレクション型をうまく使って
効率のいいコードを書けるように工夫していきましょう!

その他の開発に関する記事はこちらです。

Developerも含めた試験問題にチャレンジしてみましょう。