/** * 一,Lambda 表达式的基础语法:java8中引用了一个新的操作符 “->” 该操作符称为箭头操作符或lambda操作符 * 箭头操作符将lambda表达式拆分成两部分: * 左侧:lambda 表达式的参数列表 * 右侧:lambda 表达式中所执行的功能,即lambda体 * 二,lambda需要“函数式接口”的支持 * 函数式接口:接口中只有一个抽象方法的接口称为函数式接口。可以用注解@FunctionalInterface修饰 * 这个注解的作用可以用来检查是不是函数式接口 */ public class Lambda2 { @Test public void test1(){ /** * 传统匿名内部类 */ Runnable r=new Runnable() { @Override public void run() { System.out.println("hello world!"); } }; r.run();//"hello world!" System.out.println("-------"); /** * 语法格式一:无参数,无返回值 */ Runnable r2= ()-> System.out.println("hello lambda!"); r2.run(); //"hello lambda!" } /** * 语法格式二:有一个参数,并且无返回值,若只有一个参数(x)不用带括号也可以 * (x) -> System.out.println(x); */ @Test public void test2(){ Consumer<String> con=(x) -> System.out.println(x); con.accept("lambda真的好用!!!!");//"lambda真的好用!!!!" } /** * 语法格式三:有两个以上参数,有返回值,并且lambda体中有多条语句 * 若->后只有一条语句则可以不用带大括号 * (a,b)可以不用指明参数类型因为表达式会根据<Integer>推断出参数类型成为 “类型推断” */ @Test public void test3(){ Comparator<Integer> com= (a,b)->{ System.out.println("函数式接口"); return Integer.compare(a,b); }; int co = com.compare(5, 6); System.out.println(co);//-1 } //需求:对一个数进行运算:自己写一个函数式接口 MyFun @Test public void test4(){ Integer operation = operation(100, (x) -> x * x); //MyFun中的参数是Interger System.out.println(operation); //10000 System.out.println(operation(200,(y)->y+200 )); //400 } //具体做什么运算没有指定 public Integer operation(Integer num,MyFun mf){ return mf.getValue(num); } }
test4中用到的 函数式接口 MyFun
//自定义函数式接口 @FunctionalInterface public interface MyFun<T> { Integer getValue(Integer num); }
JDK8 Lambda 表达式01 基础语法
最新推荐文章于 2024-07-27 13:31:57 发布