Lambda学习小结 发表于 2022-09-01- 更新于 2022-09-02 869- 3m 后端123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145/* * Lambda表达式的使用 * * 1.举例: (o1,o2) -> Integer.compare(o1,o2); * * 2. 格式: * ->: lambda操作符 或者箭头操作符 * ->左边: lambda形参列表(其实就是接口中抽象方法的形参列表) * ->右边: lambda体(其实就是重写的抽象方法的方法体) * * 3.Lambda表达式的使用:(6种情况) * -> (1) 无参无返回值 * -> (2) 需要一个参数无返回值 * -> (3) 类型推断,数据类型可以由编译器推断而出,可以省略 * -> (4) Lambda如果只需要一个参数,参数的小括号可以省略 * -> (5) Lambda需要两个或两个以上个参数,多条执行语句,并且可以有返回值 * -> (6) Lambda体只有一条语句时,如果有return和大括号,则都可以省略 * 总结: * ->左边:Lambda形参列表的参数类型可以省略(类型推断);如果Lambda形参列表只有一个参数,则小括号也可以省略 * ->右边:Lambda体应该使用一对{}包括;如果Lambda体只有一条执行语句(可能是return语句),可以省略return和{} * 4.Lambda表达式的本质:作为函数式接口的实例 * * 5.如果一个接口中只声明了抽象方法,则称改接口为函数式接口。 * 可以在一个接口上使用@FunctionalInterface注解来检查它是否是一个函数式接口 * * 6.以前用匿名实现类表示的现在都可以用Lambda表达式来写 * * */import org.junit.Test;import java.util.Comparator;import java.util.function.Consumer;public class LambdaTest { //=================================================================// @Test //无参无返回值 public void test1() { Runnable r1 = new Runnable() { @Override public void run() { System.out.println("我爱北京天安门"); } }; r1.run(); System.out.println("=============================="); Runnable r2 = () -> System.out.println("我爱北京故宫"); r2.run(); } //=================================================================// @Test //需要一个参数无返回值 public void test2() { Consumer<String> con = new Consumer<String>(){ @Override public void accept(String s) { System.out.println(s); } }; con.accept("谎言和誓言的区别是什么?"); System.out.println("=============================="); Consumer<String> con2 = (String s) ->{ System.out.println(s); }; con2.accept("一个是听的人当真了,一个是说的人当真了"); } //=================================================================// @Test //类型推断,数据类型可以由编译器推断而出,可以省略 public void test3() { System.out.println("=============================="); Consumer<String> con2 = (s) ->{ System.out.println(s); }; con2.accept("一个是听的人当真了,一个是说的人当真了"); } //=================================================================// @Test //Lambda如果只需要一个参数,参数的小括号可以省略 public void test4() { System.out.println("=============================="); Consumer<String> con2 = s ->{ System.out.println(s); }; con2.accept("一个是听的人当真了,一个是说的人当真了"); } //=================================================================// @Test //Lambda需要两个或两个以上个参数,多条执行语句,并且可以有返回值 public void test5() { Comparator<Integer> com1 = new Comparator<Integer>(){ @Override public 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(com2.compare(66,55)); } //=================================================================// @Test //Lambda体只有一条语句时,如果有return和大括号,则都可以省略 public void test6() { Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2); System.out.println(com2.compare(66,55)); Runnable r2 = () -> System.out.println("我爱北京故宫"); r2.run(); }} I'm so cute. Please give me money.本文作者:丸了鸭本文链接:https://www.kdy.icu/posts/791937771.html版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。