Use Of Comparator for Custom Shorting
1 min readSep 9, 2023
Problem statement — I have user list need to short on basis of name and age
User user1 = new User(1, "sanjay", "10");
User user2 = new User(2, "xanjay", "50");
User user3 = new User(3, "banjay", "20");
User user4 = new User(4, "aanjayz", "90");
User user5 = new User(5, "aanjay", "40");
List<User> list = Arrays.asList(user3, user2, user1, user4, user5);
return list;
package com.logical.application.java8;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Logic {
public static void main(String[] args) {
List<User> user = SetDataForUser.data1();
//sort by name
Comparator<User> compratorByUserName = Comparator.comparing(User::getName);
//sort by age
Comparator<User> compratorByUserAge = Comparator.comparing(User::getAge);
//sort by name then age
Comparator<User> both = Comparator.comparing(User::getName).thenComparing(compratorByUserAge);
List<User> sortedUser =user.stream().sorted(compratorByUserName).collect(Collectors.toList());
//or
//sort by name then age
user.stream().sorted(compratorByUserName.thenComparing(compratorByUserAge)).forEach(System.out::println);
}
}
//o/p
//sort by name then age
User [id=5, name=aanjay, age=40]
User [id=4, name=aanjayz, age=90]
User [id=3, name=banjay, age=20]
User [id=1, name=sanjay, age=10]
User [id=2, name=xanjay, age=50]
Solution 2 — inner comparator method
package com.logical.application.java8;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Example2 {
public static void main(String[] args) {
List<User> user = SetDataForUser.data1();
Collections.sort(user, new Comparator<User>() {
public int compare(User o1, User o2) {
//short by age
// return o1.getAge().compareTo(o2.getAge());
//short by name
return o1.getName().compareTo(o2.getName());
};
});
for (User users : user) {
System.out.println(users);
}
}
}