I have the following collection:
Collection<AgentSummaryDTO> agentDtoList = new ArrayList<AgentSummaryDTO>();
Where AgentSummaryDTO
looks like this:
public class AgentSummaryDTO implements Serializable { private Long id; private String agentName; private String agentCode; private String status; private Date createdDate; private Integer customerCount; }
Now I have to sort the collection agentDtoList
based on the customerCount
field, how to achieve this?
Java 8 introduced a sort method in the List interface which can use a comparator. The Comparator. comparing() method accepts a method reference which serves as the basis of the comparison. So we pass User::getCreatedOn to sort by the createdOn field.
To sort an Object by its property, you have to make the Object implement the Comparable interface and override the compareTo() method. Lets see the new Fruit class again. The new Fruit class implemented the Comparable interface, and overrided the compareTo() method to compare its quantity property in ascending order.
here is my "1liner":
Collections.sort(agentDtoList, new Comparator<AgentSummaryDTO>(){ public int compare(AgentSummaryDTO o1, AgentSummaryDTO o2){ return o1.getCustomerCount() - o2.getCustomerCount(); } });
UPDATE for Java 8: For int datatype
Collections.sort(agentDtoList, (o1, o2) -> o1.getCustomerCount() - o2.getCustomerCount());
or even:
Collections.sort(agentDtoList, Comparator.comparing(AgentSummaryDTO::getCustomerCount));
For String datatype (as in comment)
Collections.sort(list, (o1, o2) -> (o1.getAgentName().compareTo(o2.getAgentName())));
..it expects getter AgentSummaryDTO.getCustomerCount()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With