


/*
  Lambda表达式的使用举例
 *
package com.atguigu.java2;import org.junit.Test;import java.util.Comparator;/*** Lambda表达式的使用举例** @author Dxkstart* @create 2021-06-08 19:15*/public class LambdaTest {@Testpublic void test1(){Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("我爱北京天安门");}};r1.run();System.out.println("*************************");//Runnable r2 = () -> System.out.println("我爱北京天安门");r2.run();}@Testpublic void test2(){Comparator<Integer> com1 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1,o2);}};int compare1 = com1.compare(12, 32);System.out.println(compare1);System.out.println("*************************");//Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);int compare2 = com2.compare(12, 32);System.out.println(compare2);System.out.println("*************************");////方法引用Comparator<Integer> com3 = Integer :: compare;int compare3 = com3.compare(12, 32);System.out.println(compare3);}}
/
  Lambda表达式的使用
 
  1.举例:(o1,o2) -> Integer.compare(o1,o2);
  2. 格式:
  -> : Lambda操作符 或 箭头操作符
  ->左边:Lambda形参列表 (其实就是接口中的抽象方法的形参列表)
  ->右边:Lambda体(其实就是重写的抽象方法的方法体)
 
  3.Lambda表达式的使用:(分为6种情况介绍)
 
  4.Lambda表达式的本质:作为函数式接口的实例
 
    总结:
    -> 左边:Lambda形参列表的参数类型可以省略(类型推断):如果Lambda形参列表只有一个参数,其一对()也可以省略
    -> 右边:Lambda体应该使用一对{}包裹;如果Lambda体只有一条执行语句(可能是return语句),可以省略这一对{}和return关键字
 
  5.如果一个接口中只声明了一个抽象方法,则此接口就称为函数式接口。
    我们可以在一个借口上使用@FunctionalInterface注解,这样可以检查他是否是一个函数式接口。
**
 3.何时使用:Lambda表达式?
当需要对一个函数式接口实例化的时候,可以使用Lambda表达式。
 4.何时使用给定的函数式接口?
如果我们开发中需要要定义一个函数是接口,首先看看在已有的JDK提供的函数式接口
是否提供了能满足需求的函数接口。如果有,则直接调用即可,不需要自己再自定义了。
package com.atguigu.java2;import org.junit.Test;import java.util.ArrayList;import java.util.Comparator;import java.util.function.Consumer;/*** Lambda表达式的使用** 1.举例:(o1,o2) -> Integer.compare(o1,o2);* 2. 格式:* -> : Lambda操作符 或 箭头操作符* ->左边:Lambda形参列表 (其实就是接口中的抽象方法的形参列表)* ->右边:Lambda体(其实就是重写的抽象方法的方法体)** 3.Lambda表达式的使用:(分为6种情况介绍)** 4.Lambda表达式的本质:作为函数式接口的实例** 总结:* -> 左边:Lambda形参列表的参数类型可以省略(类型推断):如果Lambda形参列表只有一个参数,其一对()也可以省略* -> 右边:Lambda体应该使用一对{}包裹;如果Lambda体只有一条执行语句(可能是return语句),可以省略这一对{}和return关键字** 5.如果一个接口中只声明了一个抽象方法,则此接口就称为函数式接口。* 我们可以在一个借口上使用@FunctionalInterface注解,这样可以检查他是否是一个函数式接口。** @author Dxkstart* @create 2021-06-08 19:32*/public class LambdaTest1 {//语法格式一:无参,无返回值@Testpublic void test1() {Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("我爱北京天安门");}};r1.run();System.out.println("*************************");//Runnable r2 = () -> {System.out.println("我爱北京天安门");};r2.run();}@Testpublic void test2() {//语法格式二:Lambda需要一个参数,但是没有返回值。Consumer<String> con = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};con.accept("好好学习");System.out.println("*************************");//Consumer<String> con1 = (String s) -> {System.out.println(s);};con1.accept("天天向上");}//语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”@Testpublic void test3() {Consumer<String> con1 = (String s) -> {System.out.println(s);};con1.accept("天天向上1");System.out.println("*************************");//Consumer<String> con2 = (s) -> {System.out.println(s);};con2.accept("天天向上2");}@Testpublic void test4() {ArrayList<String> list = new ArrayList<>();//类型推断int[] arr = {1, 2, 3};//类型推断}//语法格式四:Lambda若只需要一个参数时,参数的小括号可以省略@Testpublic void test5() {Consumer<String> con2 = s -> {System.out.println(s);};con2.accept("天天向上3");System.out.println("*************************");//}//语法格式五:Lambda需要两个或以上的参数,多条执行语句,并且可以有返回值@Testpublic void test6(){Comparator<Integer> com1 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {System.out.println(o1);System.out.println(o2);return o1.compareTo(o2);}};System.out.println(com1.compare(12,21));System.out.println("*************************");//Comparator<Integer> com2 = (o1,o2) -> {System.out.println(o1);System.out.println(o2);return o1.compareTo(o2);};System.out.println(com1.compare(12,21));}//语法格式六:当Lambda体只有一条语句时,return与大括号若有,都可以省略@Testpublic void test7(){Comparator<Integer> com1 = (o1,o2) -> {return o1.compareTo(o2);};System.out.println(com1.compare(12,6));System.out.println("*************************");//Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);System.out.println(com2.compare(12,6));}@Testpublic void test8(){Consumer<String> con1 = s -> {System.out.println(s);};con1.accept("天天向上");System.out.println("*************************");//Consumer<String> con2 = s -> System.out.println(s);con2.accept("天天向上");}}
