Sort java List by Object property with null check using Comparator
Example 1 :- Sorting a list without null check using Comparator inline anonymous class
Programming.java
public class Programming {
private int id;
private String language;
public Programming(int id, String language) {
this.id = id;
this.language = language;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
@Override
public String toString() {
return "Programming [id=" + id + ", language=" + language + "]";
}
}
ComparatorDemo.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparatorDemo {
public static void main(String[] args) {
List<Programming> programmingList = new ArrayList<>() {{
add(new Programming(1, "Java"));
add(new Programming(2, "Python"));
add(new Programming(3, "CSharp"));
add(new Programming(4, "JavaScript"));
add(new Programming(4, "C"));
add(new Programming(4, "Dot net"));
add(new Programming(4, "C++"));
add(new Programming(4, "Go"));
add(new Programming(4, "Php"));
}};
Collections.sort(programmingList, new Comparator<Programming>() {
@Override
public int compare(Programming o1, Programming o2) {
return o1.getLanguage().compareTo(o2.getLanguage());
}
});
programmingList.stream().forEach(programming ->
System.out.println(programming));
}
}
Output :-
Programming [id=11, language=AngularJs]
Programming [id=5, language=C]
Programming [id=7, language=C++]
Programming [id=3, language=CSharp]
Programming [id=6, language=Dot net]
Programming [id=8, language=Go]
Programming [id=1, language=Java]
Programming [id=4, language=JavaScript]
Programming [id=9, language=Php]
Programming [id=2, language=Python]
Programming [id=10, language=ReactJs]
Programming [id=12, language=VueJs]
Example 2 :- Sort java list using Java 8 lambdas
Collections.sort(programmingList,
(o1, o2) -> o1.getLanguage().compareTo(o2.getLanguage()));
Example 3 :- Sort java list with null checking
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparatorDemo {
public static void main(String[] args) {
List<Programming> programmingList = new ArrayList<>() {{
add(new Programming(1, "Java"));
add(new Programming(2, "Python"));
add(new Programming(3, "CSharp"));
add(new Programming(4, "JavaScript"));
add(new Programming(5, "C"));
add(new Programming(6, "Dot net"));
add(new Programming(7, "C++"));
add(new Programming(8, "Go"));
add(new Programming(9, "Php"));
add(new Programming(10, "ReactJs"));
add(new Programming(11, "AngularJs"));
add(new Programming(12, "VueJs"));
add(new Programming(13, null));
add(new Programming(14, null));
}};
Collections.sort(programmingList, new Comparator<Programming>() {
@Override
public int compare(Programming o1, Programming o2) {
if (o1.getLanguage() == null) {
return (o2.getLanguage() == null) ? 0 : -1;
}
if (o2.getLanguage() == null) {
return 1;
}
return o2.getLanguage().compareTo(o1.getLanguage());
}
});
programmingList.stream().forEach(programming ->
System.out.println(programming));
}
}
Output :-
Programming [id=13, language=null]
Programming [id=14, language=null]
Programming [id=11, language=AngularJs]
Programming [id=5, language=C]
Programming [id=7, language=C++]
Programming [id=3, language=CSharp]
Programming [id=6, language=Dot net]
Programming [id=8, language=Go]
Programming [id=1, language=Java]
Programming [id=4, language=JavaScript]
Programming [id=9, language=Php]
Programming [id=2, language=Python]
Programming [id=10, language=ReactJs]
Programming [id=12, language=VueJs]
You can see null values are print first and then all other are sorted based on name. If you want to print null values as last then change code as below.
Change -1 to 0 and 0 to -1
Collections.sort(programmingList, new Comparator<Programming>() {
@Override
public int compare(Programming o1, Programming o2) {
if (o1.getLanguage() == null) {
return (o2.getLanguage() == null) ? -1 : 0;
}
if (o2.getLanguage() == null) {
return 1;
}
return o1.getLanguage().compareTo(o2.getLanguage());
}
});
Now let's see how to Reverse Sort java list.
Example 4 :- Reverse Sort java list of object by its property with Null check
We can reverse java list by simply put '-' sign as following.
Collections.sort(programmingList, new Comparator<Programming>() {
@Override
public int compare(Programming o1, Programming o2) {
if (o1.getLanguage() == null) {
return (o2.getLanguage() == null) ? -1 : 0;
}
if (o2.getLanguage() == null) {
return 1;
}
return -o1.getLanguage().compareTo(o2.getLanguage());
}
});
Comments
Post a Comment