Comparable インターフェース
非プリミティブ型を含むリスト、つまりユーザー定義型のリストの並べ替えのサポートを追加します。実装では、null ポインター例外を回避するために、compareTo() メソッドで明示的に null 入力を処理する必要があります。
名前空間
Comparable のメソッド
Comparable のメソッドは次のとおりです。
compareTo(objectToCompareTo)
比較の結果である integer 値を返します。
署名
public Integer compareTo(Object objectToCompareTo)
パラメーター
- objectToCompareTo
- 型: Object
戻り値
型: Integer
使用方法
このメソッドの実装は、次の値を返します。
- このインスタンスと objectToCompareTo が等しい場合は 0
- このインスタンスが objectToCompareTo より大きい場合は 1 以上
- このインスタンスが objectToCompareTo より小さい場合は 0 未満
このオブジェクトインスタンスと objectToCompareTo が一致しない場合、System.TypeException が発生します。
Comparable の実装例
次の例では、Comparable インターフェースを実装します。この例の compareTo メソッドは、このクラスインスタンスの従業員を引数で渡された従業員と比較します。メソッドは、従業員 ID の比較に基づいて integer 値を返します。
1public class Employee implements Comparable {
2
3 public Long id;
4 public String name;
5 public String phone;
6
7 // Constructor
8 public Employee(Long i, String n, String p) {
9 id = i;
10 name = n;
11 phone = p;
12 }
13
14 // Implement the compareTo() method
15 public Integer compareTo(Object compareTo) {
16 Employee compareToEmp = (Employee)compareTo;
17 if (id == compareToEmp.id) return 0;
18 if (id > compareToEmp.id) return 1;
19 return -1;
20 }
21}この例では、Employee オブジェクトのリストの並べ替え順をテストします。
1@isTest
2private class EmployeeSortingTest {
3 @isTest
4 static void test1() {
5 List<Employee> empList = new List<Employee>();
6 empList.add(new Employee(101,'Joe Smith', '4155551212'));
7 empList.add(new Employee(101,'J. Smith', '4155551212'));
8 empList.add(new Employee(25,'Caragh Smith', '4155551000'));
9 empList.add(new Employee(105,'Mario Ruiz', '4155551099'));
10
11 // Sort using the custom compareTo() method
12 empList.sort();
13
14 // Write list contents to the debug log
15 System.debug(empList);
16
17 // Verify list sort order.
18 Assert.areEqual('Caragh Smith', empList[0].Name);
19 Assert.areEqual('Joe Smith', empList[1].Name);
20 Assert.areEqual('J. Smith', empList[2].Name);
21 Assert.areEqual('Mario Ruiz', empList[3].Name);
22 }
23}