Predicate Functional Interface Example
interface java.util.function.Predicate<T> has one abstract method test that accepts an object of generic type T and returns a boolean.
@FunctionalInterface
public interface Predicate<T>{
boolean test(T t);
}
One can use this interface when there is a need to represent a boolean expression that uses an object of type T.
Example1:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateFlight {
public static void main(String[] args) {
List<String> list = Arrays.asList(" ","","Hello"," Flying ","Birds GM");
Predicate<String> predicate = (word)-> word.trim().length()>0;
List<String> newList = filterData(list,predicate);
newList.forEach(System.out::print);
}
private static <T> List<T> filterData(List<T> list, Predicate<T> predicate){
List<T> resultList = new ArrayList<T>();
for(T t:list) {
if(predicate.test(t)) {
resultList.add(t);
}
}
return resultList;
}
}
Output
Hello Flying Birds GM
Example2:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateFlight {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1,3,4,5,6,7,8);
Predicate<Integer> evenNumbersPredicate = (num) -> num %2 == 0;
List<Integer> result1 = findResult(numbers, evenNumbersPredicate);
System.out.println("Even Numbers : "+result1);
Predicate<Integer> oddNumbersPredicate = (num) -> num %2 != 0;
List<Integer> result2 = findResult(numbers, oddNumbersPredicate);
System.out.println("Odd Numbers : "+result2);
}
public static List<Integer> findResult(List<Integer> numbers, Predicate<Integer> predicate){
List<Integer> result = new ArrayList<>();
for(Integer num : numbers) {
if(predicate.test(num)) {
result.add(num);
}
}
return result;
}
}
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateFlight {
public static void main(String[] args) {
List<String> list = Arrays.asList(" ","","Hello"," Flying ","Birds GM");
Predicate<String> predicate = (word)-> word.trim().length()>0;
List<String> newList = filterData(list,predicate);
newList.forEach(System.out::print);
}
private static <T> List<T> filterData(List<T> list, Predicate<T> predicate){
List<T> resultList = new ArrayList<T>();
for(T t:list) {
if(predicate.test(t)) {
resultList.add(t);
}
}
return resultList;
}
}
Output
Hello Flying Birds GM
Example2:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateFlight {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1,3,4,5,6,7,8);
Predicate<Integer> evenNumbersPredicate = (num) -> num %2 == 0;
List<Integer> result1 = findResult(numbers, evenNumbersPredicate);
System.out.println("Even Numbers : "+result1);
Predicate<Integer> oddNumbersPredicate = (num) -> num %2 != 0;
List<Integer> result2 = findResult(numbers, oddNumbersPredicate);
System.out.println("Odd Numbers : "+result2);
}
public static List<Integer> findResult(List<Integer> numbers, Predicate<Integer> predicate){
List<Integer> result = new ArrayList<>();
for(Integer num : numbers) {
if(predicate.test(num)) {
result.add(num);
}
}
return result;
}
}
Output:
Even Numbers : [4, 6, 8]
Odd Numbers : [1, 3, 5, 7]
Even Numbers : [4, 6, 8]
Odd Numbers : [1, 3, 5, 7]