public void filter(Filter f, List<Integer> integerList) {
for (Integer i : integerList) {
if (f.test(i)) {
System.out.println(i);
}
}
}
// 定义一个 SAM
interface Filter {
boolean test(int x);
}
public void lambdaDemo() {
filter((x) -> x % 2 == 1, Arrays.asList(1, 2, 3, 4, 5, 6, 7));
}
Java 在一个拥有两个方法(不含默认方法)的接口中,是不可以使用 Lambda 表达式的,当一个接口中只有一个抽象方法,即达成了SAM(Single Abstract Method)条件时,Lambda表达式才可以使用。
fun filter(f: (Int) -> Boolean, integerList: List<Int>) {
for (i in integerList) {
if (f(i)) {
println(i)
}
}
}
fun lambdaDemo() {
filter({ x -> x % 2 == 1 }, Arrays.asList(1, 2, 3, 4, 5, 6, 7))
}
在 Kotlin 中,函数 f:(Int)->Boolean 也是一种类型,可以像普通的参数变量一样,在函数入参中传递,当然也可以返回一个函数。
相比之下,Kotlin 对函数式编程的支持更加自然优雅。