EN
Java - sort ArrayList based on Object field
0 points
In this article, we would like to show you how to sort ArrayList in a custom sorting order based on Object field in Java.
Quick solution:
xxxxxxxxxx
1
users.sort(new Comparator<User>() {
2
public int compare(User u1, User u2) {
3
if (u1.getAge() == u2.getAge())
4
return 0;
5
return u1.getAge() < u2.getAge() ? -1 : 1;
6
}
7
});
In this example, we create a custom Comparator
that will help us to sort users
ArrayList by users age
.
xxxxxxxxxx
1
import java.util.*;
2
3
public class Example {
4
5
public static void main(String[] args) {
6
User user1 = new User(1, "Tom", 24);
7
User user2 = new User(2, "Kate", 22);
8
User user3 = new User(3, "Ann", 25);
9
10
List<User> users = new ArrayList<>();
11
12
users.add(user1);
13
users.add(user2);
14
users.add(user3);
15
16
System.out.println("Before: " + users);
17
18
users.sort(new Comparator<User>() {
19
public int compare(User u1, User u2) {
20
if (u1.getAge() == u2.getAge())
21
return 0;
22
return u1.getAge() < u2.getAge() ? -1 : 1;
23
}
24
});
25
26
System.out.println("After: " + users);
27
}
28
}
Output:
xxxxxxxxxx
1
Before: [User{ id=1, name='Tom', age=24 }, User{ id=2, name='Kate', age=22 }, User{ id=3, name='Ann', age=25 }]
2
After: [User{ id=2, name='Kate', age=22 }, User{ id=1, name='Tom', age=24 }, User{ id=3, name='Ann', age=25 }]
Note:
We are able to print
users
in the Example class, because we have overriddentoString()
method in the User class.
User class:
xxxxxxxxxx
1
public class User {
2
private final int id;
3
private final String name;
4
private final int age;
5
6
public User(int id, String name, int age) {
7
this.id = id;
8
this.name = name;
9
this.age = age;
10
}
11
12
public int getId() {
13
return id;
14
}
15
16
public String getName() {
17
return name;
18
}
19
20
public int getAge() {
21
return age;
22
}
23
24
25
public String toString() {
26
return "User{ " +
27
"id=" + id +
28
", name='" + name + '\'' +
29
", age=" + age +
30
" }";
31
}
32
}