面向对象语法有一个非常大的局限性:结构必须非常完整
要想使用函数式编程有一个前提:接口必须只有一个方法,如果有两个方法,则无法使用函数式编程。如果现在某 个接口就是为了函数式编程而生的,最好在定义时就让其只能够定义一个方法,所以有了一个新的注解:
@FunctionalInterface
当行语句语法:
(参数) -> 单行语句 ;
多行语句语法:
(参数) -> {} ;
具体实例如下:
@FunctionalInterface
interface IUtil2<R>{
R convert();
}
public class TextMethodRef {
public static void main(String[] args) {
String str = "HELLO";
IUtil2<String> iUtil2 = ()->{
return str.toLowerCase();//如果现在你的表达式里只有一行进行数据的返回,
//那么直接使用语句即可,可以不使用return。
};
System.out.println(iUtil2.convert());
}
}
只有一行语句进行数据的返回时可以不用return直接使用语句。
@FunctionalInterface
interface IUtil2<R>{
R convert();
}
public class TextMethodRef {
public static void main(String[] args) {
String str = "HELLO";
IUtil2<String> iUtil2 = ()->str.toLowerCase();
System.out.println(iUtil2.convert());
}
}
内建函数式接口
Lamdba的核心在于:函数式接口。而函数式接口的核心:只有一个方法。
java.util.function 实际上函数式编程分为以下四种接口:
- 功能型函数式接口:public interface Function<T, R> R apply(T t);
import java.util.function.Function;
public class TextMethodRef{
public static void main(String[] args) {
Function<Integer,String>fun = String::valueOf;
System.out.println(fun.apply(1000));
}
}
- 供给型函数式接口: public interface Supplier T get();
- 消费型函数式接口:public interface Consumer void accept(T t);
- 断言型接口:public interface Predicate boolean test(T t);