In this article, I'm going to explain about the way we can sort and filter an array using lambda expressions.
TASK 1
We will assume that, we have a list of students as follows:
In this scenario, we will assume that we have to sort the students by name:
Initially, how we cater this without lambda expression:
Now will cater this requirement with lambda expressions.
Note: Since 'Comparator' interface is a functional interface we can sort the object list as above.
TASK 2
In here, we will assume that we need to filter the students, name starting with 'R'
Withoutlambda expression we can achieve this as below.
How we achieve this using lambda expression.
Note: Java 8, OFTB support many functional interfaces such as "Predicate". You can find more on here.
Note: Find more information aboutfuncational interfaces here.
TASK 1
We will assume that, we have a list of students as follows:
List<Student> students = Arrays. asList ( new Student( "Tharanga", "UOC", 22), new Student( "Ruwan", "UOM", 24), new Student( "Ruvini", "UOK", 20), new Student( "Randika", "TOUC", 25), new Student( "Amara", "UOR", 23)) ;
In this scenario, we will assume that we have to sort the students by name:
Initially, how we cater this without lambda expression:
Collections. sort( students, new Comparator<Student>(){ @Override public int compare( Student o1, Student o2){ return o1.getName().compareTo(o2.getName());} } );
Now will cater this requirement with lambda expressions.
Collections.sort(students, (o1, o2) -> o1.getName().compareTo(o2.getName()));
Note: Since 'Comparator' interface is a functional interface we can sort the object list as above.
TASK 2
In here, we will assume that we need to filter the students, name starting with 'R'
Without
import java.util.Arrays; import java.util.Collections; import java.util.List; public class StudentApplication { public static void main(String[] args) { List<Student> students = Arrays.asList( new Student("Tharanga", "UOC", 22), new Student("Ruwan", "UOM", 24), new Student("Ruvini", "UOK", 20), new Student("Randika", "TOUC", 25), new Student("Amara", "UOR", 23) ); Collections.sort(students, (o1, o2) -> o1.getName().compareTo(o2.getName())); printConditionally(students, new Condition() { @Override public boolean test(Student student) { return student.getName().startsWith("R"); } }); } private static void printConditionally(List<Student> students, Condition condition) { for (Student student: students) { if(condition.test(student)) { System.out.println(student); } } } } interface Condition { boolean test(Student student); }
How we achieve this using lambda expression.
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;
public class StudentApplication {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Tharanga", "UOC", 22),
new Student("Ruwan", "UOM", 24),
new Student("Ruvini", "UOK", 20),
new Student("Randika", "TOUC", 25),
new Student("Amara", "UOR", 23)
);
Collections.sort(students, (o1, o2) -> o1.getName().compareTo(o2.getName()));
printConditionally(students, student -> student.getName().startsWith("R"));
}
private static void printConditionally(List<Student> students, Predicate<Student> predicate) {
for (Student student: students) {
if(predicate.test(student)) {
System.out.println(student);
}
}
}
}
Note: Java 8, OFTB support many functional interfaces such as "Predicate". You can find more on here.
Note: Find more information about
No comments:
Post a Comment