Sort custom object property with null values using Java 8 lambda expression
What is lambda expression?
The expression through which we can represent an anonymous function.
learn more about lambda expression :
Lets see how we can sort custom object property without and with lambda expression.
Example 1 : Sort custom object without lambda expression using Collections.sort()
Programming.java
public class Programming {
private int id;
private String name;
public Programming(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Programming [id = " + id + ", name = " + name + "]";
}
}
SortObjectPropertyByLambda.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortObjectPropertyByLambda {
public static void main(String[] args) {
List<Programming> language = new ArrayList<Programming>() {{
add(new Programming(1, "Java"));
add(new Programming(2, "Python"));
add(new Programming(5, "JavaScript"));
add(new Programming(10, "Php"));
add(new Programming(4, "Dotnet"));
add(new Programming(20, "ReactNative"));
add(new Programming(6, "AngularJs"));
}};
Comparator<Programming> comparator = new Comparator<Programming>() {
@Override
public int compare(Programming o1, Programming o2) {
return o1.getName().compareTo(o2.getName());
}
};
Collections.sort(language, comparator);
System.out.println(language);
}
}
Output :
[Programming [id = 6, name = AngularJs],
Programming [id = 4, name = Dotnet],
Programming [id = 1, name = Java],
Programming [id = 5, name = JavaScript],
Programming [id = 10, name = Php],
Programming [id = 2, name = Python],
Programming [id = 20, name = ReactNative]]
For reverse order, change in return statement in compare method like below :
public int compare(Programming o1, Programming o2) {
return o2.getName().compareTo(o1.getName());
}
Example 2 : Sort custom object with Java 8 lambda expression using Collections.sort()
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortObjectPropertyByLambda {
public static void main(String[] args) {
List<Programming> language = new ArrayList<Programming>() {{
add(new Programming(1, "Java"));
add(new Programming(2, "Python"));
add(new Programming(5, "JavaScript"));
add(new Programming(10, "Php"));
add(new Programming(4, "Dotnet"));
add(new Programming(20, "ReactNative"));
add(new Programming(6, "AngularJs"));
}};
Collections.sort(language, (o1, o2) -> o1.getName().compareTo(o2.getName()));
System.out.println(language);
}
}
If we try to sort object with null value, then we get following exception.
Exception in thread "main" java.lang.NullPointerException
at Java8.SortObjectPropertyByLambda.lambda$0(SortObjectPropertyByLambda.java:23)
So we can use Comparator comparing method for sort null value as well. lets see example for that.
Example 3 : Sort custom object property with null values in java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortObjectPropertyByLambda {
public static void main(String[] args) {
List<Programming> language = new ArrayList<Programming>() {{
add(new Programming(15, "null"));
add(new Programming(1, "Java"));
add(new Programming(2, "Python"));
add(new Programming(5, "JavaScript"));
add(new Programming(10, "Php"));
add(new Programming(4, "Dotnet"));
add(new Programming(20, "ReactNative"));
add(new Programming(6, "AngularJs"));
add(new Programming(6, "null"));
}};
Comparator<Programming> comparator = Comparator.comparing(Programming::getName,
Comparator.nullsLast(Comparator.naturalOrder())
);
Collections.sort(language, comparator);
System.out.println(language);
}
}
Output :
[Programming [id = 6, name = AngularJs],
Programming [id = 4, name = Dotnet],
Programming [id = 1, name = Java],
Programming [id = 5, name = JavaScript],
Programming [id = 10, name = Php],
Programming [id = 2, name = Python],
Programming [id = 20, name = ReactNative],
Programming [id = 15, name = null],
Programming [id = 6, name = null]]
We can also reverse the data using Comparator.reverseOrder() method.
Other related articles :
Comments
Post a Comment