I am learning Java predicates and struck here on basic code. Below is my code.
package TestLambda;
public class Animal {
private String species;
private boolean canHop;
private boolean canSwim;
public Animal(String species,boolean canHop,boolean canSwim){
this.species = species;
this.canHop = canHop;
this.canSwim = canSwim;
}
public boolean canHop(){return canHop;}
public boolean canSwim(){return canSwim;}
public String toString(){return species;}
Below is my interface.
package TestLambda;
@FunctionalInterface
public interface CheckTrait {
boolean Test(Animal a);
}
Implementing the interface.
package TestLambda;
public class CheckIfHopper implements CheckTrait {
public boolean Test(Animal a){
return a.canHop();
}
}
Now i am testing a simple Lambda.
package TestLambda;
import java.util.ArrayList;
import java.util.List;
public class LambdaSearch {
public static void main(String[] args) {
List<Animal> animals = new ArrayList<>();
animals.add(new Animal("fish",false,true));
animals.add(new Animal("dog",true,true));
animals.add(new Animal("rabbit",true,false));
animals.add(new Animal("horse",true,false));
print(animals, a -> a.canHop());
}
public static void print(List<Animal> animals,CheckIfHopper checkIfHopper){
for(Animal animal :animals){
if(checkIfHopper.Test(animal)){
System.out.println(animal + " ");
}
}
}
}
Mycode is throwing error:- TestLambda.CheckIfHopper is not a functional interface
What i am doing wrong please?