java - Sort ArrayList of custom Objects by property -
i read sorting arraylists using comparator in of examples people used compareto according research method strings.
i wanted sort arraylist of custom objects 1 of properties: date object (getstartday()). compare them item1.getstartdate().before(item2.getstartdate()) wondering whether write like:
public class customcomparator {     public boolean compare(object object1, object object2) {         return object1.getstartdate().before(object2.getstartdate());     } }  public class randomname {     ...     collections.sort(database.arraylist, new customcomparator);     ... } 
since date implements comparable, has compareto method string does.
so custom comparator this:
public class customcomparator implements comparator<myobject> {     @override     public int compare(myobject o1, myobject o2) {         return o1.getstartdate().compareto(o2.getstartdate());     } } the compare() method must return int, couldn't directly return boolean planning anyway.
your sorting code wrote:
collections.sort(database.arraylist, new customcomparator()); a shorter way write this, if don't need reuse comparator, write inline anonymous class:
collections.sort(database.arraylist, new comparator<myobject>() {     @override     public int compare(myobject o1, myobject o2) {         return o1.getstartdate().compareto(o2.getstartdate());     } }); since java-8
you can write last example in shorter form using lambda expression comparator:
collections.sort(database.arraylist,                          (o1, o2) -> o1.getstartdate().compareto(o2.getstartdate())); and list has sort(comparator) method, can shorten further:
database.arraylist.sort((o1, o2) -> o1.getstartdate().compareto(o2.getstartdate())); this such common idiom there's a built-in method generate comparator class comparable key:
database.arraylist.sort(comparator.comparing(myobject::getstartdate)); all of these equivalent forms.
Comments
Post a Comment