Um einen Lambda-Ausdruck als Argument zu übergeben, muss der Typ des Parameters (der den Lambda-Ausdruck als Argument erhält) vom Typ der funktionalen Schnittstelle sein.
Wenn es eine funktionale Schnittstelle gibt -
interface IMyFunc {
boolean test(int num);
}
Und es gibt eine Filtermethode, die den Wert int nur dann in die Liste aufnimmt, wenn er größer als 5 ist. Beachten Sie hier, dass die Filtermethode die Funktionsschnittstelle IMyFunc als einen der Parameter hat. In diesem Fall kann ein Lambda-Ausdruck als Argument für den Methodenparameter übergeben werden.
public class LambdaDemo {
public static List<Integer> filter(IMyFunc testNum, List<Integer> listItems) {
List<Integer> result = new ArrayList<Integer>();
for(Integer item: listItems) {
if(testNum.test(item)) {
result.add(item);
}
}
return result;
}
public static void main(String[] args) {
List<Integer> myList = new ArrayList<Integer>();
myList.add(1);
myList.add(4);
myList.add(6);
myList.add(7);
// calling filter method with a lambda expression
// as one of the param
Collection<Integer> values = filter(n -> n > 5, myList);
System.out.println("Filtered values " + values);
}
}