Custom Sorting for Wrapper Classes using Apex
Hello, so you want to Sort List<-Wrapper> other than standard sObjects, i.e., you need to sort a wrapper class.
In order to acheive sorting, we need to Implement
standard class Comparable
, Here we will sort using inputA in class
Consider a wrapper class as follows,
global class wrapper implements Comparable{
public string inputA;
public string inputB;
public string inputC;
public wrapper(string inputA, string inputB, string inputC){
this.inputA = inputA;
this.inputB = inputB;
this.inputC = inputC;
}
/* so here is the 'Trick', now add following method in your class */
public Integer compareTo(Object compareTo) {
wrapper compareItem = (wrapper)compareTo;
if (inputA == compareItem.inputA) return 0;
if (inputA > compareItem.inputA) return 1;
return -1;
}
}
So if you want to sort using inputB/C use inputB/C instead of inputA
Example Explained
So I'm initialising above class and adding Items,
List<wrapper> wList = new List<wrapper>();
wList.add(new wrapper('two', 'foo2', 'bar2'));
wList.add(new wrapper('three', 'foo3', 'bar3'));
wList.add(new wrapper('one', 'foo1', 'bar1'));
/*Now i'm sorting above list. It will sort in oreder of one, two, three because we used inputA in compareMethod, so it will sort using first parameter in class*/
wList.sort();
system.debug(wList);
output