Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念
函数式接口(Functional Interface)就是有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
//格式:
public interface Converter{
void convert();
}
//对于是否是函数式接口,java8中也提供了一个专用的注解:@FunctionalInterface。通过这个注解,可以确定是否是函数式接口
//示例:
@FunctionalInterface
public interface Converter<S, T> {
@Nullable
T convert(S var1);
}
Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分 :
左侧 : Lambda 表达式的参数列表
右侧 : Lambda 表达式中所需执行的功能, 即 Lambda 体
Comparator com = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
匿名内部类用法
public void oldRunable() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Myrunable is using!");
}
}).start();
}
使用lambda表达式
public void runable() {
new Thread(() -> System.out.println("It's a lambda function!")).start();
}
匿名内部类用法
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
Iterator var2 = this.iterator();
while (var2.hasNext()) {
T t = var2.next();
action.accept(t);
}
}
以上就是Java8新特性函数式开发的一些相关特性,希望对大家有帮助