import java.util.Comparator;
import java.util.function.Consumer;
/**
* create gl
* lambda 基础语法
*
* -> 箭头操作符或lambda操作符
* 左侧: lambda 表达式的参数列表
* 右侧: lambda表达式中所需执行的功能,即lambda体
* 需要函数式接口的支持,一个接口下只有一个方法,可以使用注解 @FunctionalInterface 修饰,可以检查是否是函数式接口
*
* 横批:能省则省
* 上联:左右遇一括号省
* 下联:左侧推断类型省
**/
public class Test01 {
/**
* 无参数,无返回值
* () -> System.out.println("666")
*/
public static void test1(){
int a=0; //jdk1.8以前 必须申明为 final ,现在默认是final
Runnable runnable=new Runnable() {
@Override
public void run() {
System.out.println("666:"+a);
}
};
runnable.run();
System.out.println("---------------------------------------");
Runnable runnable1= () -> System.out.println(777);
runnable1.run();
}
/**
* 有一个参数,无返回值
* (x) -> System.out.println(x) 只有一个参数 小括号可以不写
*/
public static void test2(){
// Consumer consumer = (x) -> System.out.println(x);
Consumer consumer = x -> System.out.println(x);
consumer.accept("888");
}
/**
* 有多个参数,有返回值,并且lambda 体中有多个语句,需用大括号,如果只有一条语句,则 return和大括号可以不写
* 参数列表的数据类型可以省略不写,因为jvm有类型推断
* @return
*/
public static void test3(){
// Comparator<Integer> comparator = (x,y) -> {
// System.out.println("666");
// return Integer.compare(x,y);
// };
Comparator<Integer> comparator = (x,y) -> Integer.compare(x,y);
System.out.println(comparator.compare(5,9));
}
/**
* 需求:对一个数进行运算
*/
public static void test4(){
Integer operation = operation(100, x -> x * x);
System.out.println(operation);
}
public static Integer operation(Integer num,Myfun myfun){
return myfun.getValue(num);
}
public static void main(String[] args) {
// test1();
// test2();
// test3();
test4();
}
}
@FunctionalInterface
public interface Myfun {
Integer getValue(Integer num);
}