Apex и интерфейс Comparable

Переопределение интерфейса Comparable. Позволяет нам сравнить объекты между собой по определённым критериям.

Вспомним суть работы Comparable:

  • Если экземпляр равны, вернёт 0
  • Если экземпляр больше, вернёт 1
  • Если экземпляр меньше, вернёт -1

Такой подход позволяет сортировать кастомные объекты в List с помощью метода sort(), но для этого нужен доп класс.

Переходим к практике:

  • Имплементируем Combarable
  • Переопределяем метод compareTo (Object compareTo)
public class InvoiceWrapper implements Comparable {
    public Invoice__c invoice { get; set; }
    public Boolean isSelected { get; set; }

    public InvoiceWrapper(Invoice__c invoice, Boolean isSelected) {
        this.invoice = invoice;
        this.isSelected = isSelected;
    }

    public Integer compareTo(Object compareTo) {
        InvoiceWrapper compareToInvoiceWrapper = (InvoiceWrapper)compareTo;
        Integer returnValue = 0;
        if (invoice.Name > compareToInvoiceWrapper.invoice.Name) {
            returnValue = 1;
        } else if (invoice.Name < compareToInvoiceWrapper.invoice.Name) {
            returnValue = -1;
        }
        return returnValue;
    }
} 

Да, тут использовали Wrapper, иначе никак, так как у кастомных типов нет класса, где мы бы могли переопределить метод compareTo. Просто создайте обёртку и добавьте в нём экземпляр необходимого вам типа. И уже его передавайте в List.

2 Likes