Lambda表达式详解(包含笔记和对应练习)

📅 2026/6/19 0:56:43
Lambda表达式详解(包含笔记和对应练习)
1、Lambda表达式1lambda表达式及注意事项———1、Lambda表达式实现函数式接口//采用匿名内部类的书写方法 //new了{}这个匿名内部类实现了ComparatorInteger()这个接口 Arrays.sort(arr, new ComparatorInteger() { Override public int compare(Integer o1,Integer o2){ return o1-o2;//按照升序排序 // return o2-o1;//按照降序排序 } }); //采用Lambda表达式进行简化 Arrays.sort(arr, (Integer o1,Integer o2)-{//方法的形参 return o1-o2;//方法体 } );函数式编程函数式编程是一种思想特点。面向对象先找对象让对象做事情。函数式编程思想忽略面向对象复杂语法强调做什么而不是谁去做。下面要学习的Lambda表达式就是函数式思想的体现。Lambda表达式的标准格式- {}() 对应着方法的形参-固定格式{}对应着方法的方法体注意点Lambda表达式可以用来简化匿名内部类的书写Lambda表达式只能简化函数式接口的匿名内部类的写法有且仅有一个抽象方法的接口叫做函数式接口接口上方可以加Functionallnterface注解,该注解告诉编译器检查该接口必须是函数式接口否则编译器就会报错。函数式接口Lambda表达式常见的三种方式将Lambda表达式赋值给函数式接口类型的变量。将Lambda表达式作为函数式接口类型的参数传给某个方法。使用函数式接口对Lambda表达式进行强制转换。Lambda表达式的执行规则Lambda 表达式本身只是一个 “方法定义”只有当你调用它对应的抽象方法时Lambda 里的代码才会被执行。FunctionalInterface; interface Swim { public abstract void swimming(); } public class Main { public static void main(String[] args) { // method( new Swim() { // // public void swimming() { // System.out.println(人在swimming); // } // }); method( ()-{ System.out.println(小周正在游泳~); } ); } public static void method(Swim s){ s.swimming(); } }————1Lambda表达式实现无参抽象方法interface SayHiInterface{ String sayHi(); } public class LambdaText3 { public static void main(String[] args) { SayHiInterface pi ()-你好啊这是Lambda表达式; } }————2Lambda表达式实现有参抽象方法interface AdditionInterface{ int add(int a,int b); } public class LambdaText4 { public static void main(String[] args) { AdditionInterface np (x,y)- xy; int result np.add(15,26); System.out.println(result); } }————3Lambda表达式使用代码块// 函数式接口 interface CheckGrade { // 查询成绩结果 String check(int grade); } // 测试类 public class GradeDemo { public static void main(String[] args) { // Lambda表达式实现代码块 CheckGrade g (n) - { // 如果成绩为90~100 if (n 90 n 100) { // 输出成绩为优 return 成绩为优; // 如果成绩为80~89 } else if (n 80 n 90) { // 输出成绩为良 return 成绩为良; // 如果成绩为60~79 } else if (n 60 n 80) { // 输出成绩为中 return 成绩为中; // 如果成绩小于60 } else if (n 0 n 60) { // 输出成绩为差 return 成绩为差; // 其他数字不是有效成绩 } else { // 输出成绩无效 return 成绩无效; } }; // 不要丢掉lambda语句后的分号 // 输出查询结果 System.out.println(g.check(89)); } }———2、Lambda表达式调用外部变量————1Lambda表达式无法更改局部变量局部变量在Lambda表达式中默认被定义为final也就是说Lambda表达式只能调用局部变量却不能改变其值。lambda表达式只是描述了抽象方法是如何实现的在抽象方法没有被调用前lambda 表达式中的代码并没有被执行因此在运行抽象方法之前类成员变量的值不会发生变化只要抽象方法被调用就会执行 lambda 表达式中的代码类成员变量的值也就会被修改Lambda表达式的执行规则Lambda 表达式本身只是一个 “方法定义”只有当你调用它对应的抽象方法时Lambda 里的代码才会被执行。interface VariableInterface{ void method(); } public class LambdaText5 { public static void main(String[] args) { int value 100; //创建局部变量 VariableInterface v ()- { int num value - 90; value 12; //更改局部变量此处会报错无法通过编译。 }; } }————2Lambda表达式可以更改成员变量类成员变量在Lambda表达式中不是被final修饰的因此Lambda表达式可以改变其值。lambda 表达式可以调用并修改类成员变量的值lambda 表达式只是描述了抽象方法是如何实现的在抽象方法没有被调用前lambda 表达式中的代码并没有被执行因此在运行抽象方法之前类成员变量的值不会发生变化只要抽象方法被调用就会执行 lambda 表达式中的代码类成员变量的值也就会被修改Lambda表达式的执行规则Lambda 表达式本身只是一个 “方法定义”只有当你调用它对应的抽象方法时Lambda 里的代码才会被执行。interface VariableInterface1{ void method(); } public class LambdaText6 { private int value 100; public void action(){ 这一行只是【定义 Lambda】并没有执行 VariableInterface1 v ()- { value -12; }; System.out.println(运行接口方法前value value); v.method();. 调用接口方法真正执行 Lambda System.out.println(运行接口方法后value value); } public static void main(String[] args){ LambdaText6 demo new LambdaText6(); demo.action(); } } 输出为100 -12———3、Lambda表达式与异常处理接口的抽象方法可以在定义时声明抛出异常比如void method() throws Exception;用来保障程序安全性。Lambda 表达式本身不需要额外写抛出异常的语法因为它会默认继承抽象方法声明的异常。当调用这个被 Lambda 实现的抽象方法时必须手动进行异常处理try-catch 捕获 或者 在调用方法上继续 throws 声明。2Lambda表达式的省略写法Lambda表达式的省略写法省略核心可推导可省略method(()-{System.out.println(小周正在游泳~);});先看上面例题的代码。- 语句;Lambda的省略规则参数类型可以省略不写。如果只有一个参数参数类型可以省略同时()也可以省略。如果Lambda表达式的方法体只有一行大括号分号return可以省略不写需要同时省略。Lambda的完整格式Arrays.sort(arr, (Integer o1,Integer o2)-{//方法的形参return o1-o2;//方法体});Lambda的省略写法Arrays.sort(arr,(o1,o2)- o1-o2);import java.util.Arrays; import java.util.Comparator; public class LambdaText2 { public static void main(String[] args) { String[] str {a,aaaa,aaa,aa}; //匿名内部类 // Arrays.sort(str,new ComparatorString(){ // Override // public int compare(String o1, String o2) { // return o1.length()-o2.length(); // } // }); //Lambda表达式完整格式 // Arrays.sort(str,(String o1, String o2)-{ // return o1.length()-o2.length(); // }); //Lambda表达式省略格式 Arrays.sort(str,(o1,o2)-o1.length()-o2.length()); System.out.println(Arrays.toString(str)); } }interface SayHiInterface{ String sayHi(); } public class LambdaText3 { public static void main(String[] args) { SayHiInterface pi ()-你好啊这是Lambda表达式; } }interface AdditionInterface{ int add(int a,int b); } public class LambdaText4 { public static void main(String[] args) { AdditionInterface np (x,y)- xy; int result np.add(15,26); System.out.println(result); } }