public static void main(String[] args) {
founctions();
String name ="123";
System.out.println(validateValue(name, s -> s.isEmpty() ? "不能为空" : s));
}
//1、函数式接口 Function:传入一个类型值返回一个类型值(接口)
static void founctions() {
Function<String,String> function=new Function() {
@Override
public Object apply(Object o) {
return o;
}
};
String str1=function.apply("aaa");
System.out.println(str1);
}
//上下等价
public static String validateValue(String name,Function<String,String> function){
return function.apply(name);
}
//1、函数式接口 Function:传入一个类型值返回一个类型值(接口) //2、函数式接口 Consumer: 传入一个类型值,没有返回值 //3.函数式接口 Predicate:一般用于做判断,返回boolean类型
一、函数式接口和::结合使用
java的::关键字的用法参考:https://blog.csdn.net/kegaofei/article/details/80582356
lamda表达式是为了优化匿名内部类(有且只有一个抽象方法)
lamda表达式:
格式:() -> { 重写方法的内容}
// 格式含义:
// () 代表是的 你这个接口中的那个抽象方法的 参数 也就是 这个例子中 findAll()方法的参数。
// -> 这是一个固定格式 意思是 ()里面的参数 可以给 后面的大括号{}使用。
// {} 就是要写 你重写方法的 那个方法体。
lambda优化:
()内如果只有一个参数 可以省略数据类型和小括号本身。
()内多个参数的 只能省略参数的数据类型不能省略小括号本身
{}内如果只有一句话 可以省略分号 还有return 还有大括号本身
lambda和匿名内部类的区别:
1:
匿名内部类 可以对 普通类 抽象类 接口 都可以使用
但是lambda必须对接口使用
2:
匿名内部类 可以要求 普通类 抽象类 接口 里面有多少抽象方法
lambda 要求接口中只能有一个抽象方法
3:
匿名内部类会生成class文件
而lambda不生成class文件
二、Optional的用法