sObject のリストの並べ替え
sObject の場合、並べ替えは昇順で、次のセクションで説明する一連の比較ステップを使用します。sObject のカスタム並べ替え順は、Comparable インターフェースを実装する Apex クラスで sObject をラップして作成することができます。また、Comparator を実装するクラスをパラメーターとして並べ替えメソッドに渡して作成することもできます。「sObject のカスタム並べ替え順」を参照してください。
sObject のデフォルトの並べ替え順
- sObject 型の表示ラベル。
たとえば、Account sObject は Contact の前になります。
- Name 項目 (該当する場合)。
たとえば、リストに Alpha と Beta という名前の 2 つの取引先がある場合、取引先 Alpha が取引先 Beta よりも前になります。
- 標準項目。ID 項目と Name 項目を除き、アルファベット順で最初の項目から使用されます。
たとえば、2 つの取引先が同じ名前の場合、並べ替えに使用される最初の標準項目は AccountNumber です。
- カスタム項目。アルファベット順で最初の項目から使用されます。
たとえば、2 つの取引先の名前と標準項目が同じで、FieldA と FieldB という 2 つのカスタム項目がある場合、並べ替えでは FieldA の値が最初に使用されます。
この一連のすべてのステップが実行されるとは限りません。たとえば、同じ種別で一意の Name 値がある 2 つの sObject がリストに含まれている場合、このリストは、Name 項目に基づいて並べ替えられ、並べ替えはステップ 2 で停止します。別の例で、名前が同じか sObject に Name 項目がない場合、並べ替えはステップ 3 まで進み、標準項目を基準に並べ替えられます。
テキスト項目の場合、並べ替えアルゴリズムは Unicode 並べ替え順を使用します。また、空の項目は並べ替え順で空でない項目より前になります。
Account sObject のリストの並べ替えの例を次に示します。この例では、Name 項目が使用されて、リスト内で Acme 取引先が 2 つの sForce 取引先より前に配置されることを示します。sForce という名前の取引先が 2 つあり、アルファベット順で Industry 項目は Site 項目より前になるため、Industry 項目が残りの取引先の並べ替えに使用されます。
次の例は前の例と同様ですが、Merchandise__c カスタムオブジェクトを使用する点が異なります。この例では、Name 項目が使用されて、リスト内で Notebooks 商品が Pens より前に配置されることを示します。Name 項目値が Pens の商品 sObject が 2 つあるため、Description 項目が残りの商品品目の並べ替えに使用されます。Description 項目が並べ替えに使用されるのは、アルファベット順で Price 項目と Total_Inventory 項目の前になるためです。
sObject のカスタム並べ替え順
リスト内の sObject のカスタム並べ替え順を作成するには、Comparator インターフェースを実装し、それをパラメーターとして List.sort メソッドに渡します。
sObject のラッパークラスを作成し、Comparable インターフェースを実装する方法もあります。ラッパークラスに対象の sObject を含め、並べ替えロジックを指定する Comparable.compareTo メソッドを実装します。
例
次の例では、Amount 項目に基づいて 2 つの商談を比較する Comparator インターフェースを実装します。
次のテストでは、Comparator オブジェクトのリストを並べ替え、リストの要素が商談金額を基準に並べ替えられていることを確認します。
例
次の例では、Opportunity のラッパークラス Comparable を作成する方法を示します。このクラスの compareTo メソッドの実装では、Amount 項目 (このインスタンスに含まれるクラスメンバー変数)、およびメソッドに渡された商談オブジェクトに基づいて 2 つの商談を比較します。
次のテストでは、OpportunityWrapper オブジェクトのリストを並べ替え、リストの要素が商談金額を基準に並べ替えられていることを確認します。