Lambda表达式
-
举例: (o1,o2) -> Integer.compare(o1,o2)
-
格式:
- -> : Lambda操作符或者箭头操作符
- -> 左边 : 重写方法的形参
- -> 右边 : 重写方法的方法体
-
使用:分6种情况(见代码)
- -> 左边 : Lambda表达式的形参类型可省略(类型推断),如果只有一个形参时"()"可以省略
- -> 右边 : Lambda表达体应用"{}“包起来,如果方法体只有一条语句(可能时return语句),”{}"可以不写return也不写
-
本质:作为函数式接口的实例
-
用途:所有匿名内部类的表达式现在都可以用Lambda表达式来写
@Test //方式一:无参数且无返回值 public void test1(){ Runnable r1 = new Runnable() { @Override public void run() { System.out.println("欢迎来到80年代"); } }; r1.run(); System.out.println("**************"); Runnable r2 = () -> System.out.println("欢迎来到90年代"); r2.run(); } @Test //方式二:有一个参数,无返回值 public void test2(){ Consumer<String> consumer = new Consumer<String>() { @Override public void accept(String s) { System.out.println("你好" + s); } }; consumer.accept("中国"); System.out.println("**************"); Consumer<String> consumer1 = (String s) -> System.out.println("你好" + s); consumer1.accept("China"); } @Test //方式三:类型推断,带有泛型的可以省略 public void test3(){ Consumer<String> consumer1 = (s) -> System.out.println("你好" + s); consumer1.accept("China"); } @Test //方式四:只有一个参数,小括号可以不写 public void test4(){ Consumer<String> consumer1 = s -> System.out.println("你好" + s); consumer1.accept("China"); } @Test //方式五:有多个参数 public void test5(){ Comparator<Integer> c1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Integer.compare(o1,o2); } }; System.out.println(c1.compare(12, 21)); System.out.println("**************"); Comparator<Integer> c2 = (o1,o2) -> { System.out.println(o1); System.out.println(o2); return Integer.compare(o1,o2); }; System.out.println(c2.compare(32,21)); } @Test //方式六:右边只有一条语句{}可以不写,如果有return,return也不写 public void test6(){ Comparator<Integer> c2 = (o1,o2) -> Integer.compare(o1,o2); System.out.println(c2.compare(32,21)); }