lambda表达式

xiaoxiao2021-02-28  63

用途

用于传递代码块,在没有lambda表达式的时候,传递代码块必须通过构造对象传递。

形式

参数,箭头,以及一个表达式 如果代码要完成计算其无法通过一个表达式完成,则需要加入{} 如果lambda表达式没有参数,但是其必须依旧提供(),就像是无参数方法 如果lambda表达式参数的类型可以推导出来,则可以省略参数类型 如果只有一个参数,且参数类型可以推导出来,则可以省略括号

(String first, String second) -> { if(first.length() < second.length) return -1; else if(first.length > second.length) return 1; else return 0; } //无参数表达式 ()->{ for(int i = 0; i < 10; i++) System.out.println(i); }

Lambda表达式的用途

用于替代函数式接口,这种接口中只有一种方法

替代Comparator public class LambdaTest { public static void main(String[] args) { String[] planents = new String[] {"Merry", "Venus", "Earth", "Mars", "Jupter", "Saturn"}; System.out.println(Arrays.toString(planents)); System.out.println("Sorted:"); Arrays.sort(planents); System.out.println(Arrays.toString(planents)); System.out.println("Sorted By Length:"); String second; String first; Arrays.sort(planents, (first, second)->first.length()-second.length());//函数式接口可以使用lambda表达式代替 System.out.println(Arrays.toString(planents)); } }

方法引用

有时候,现有的的方法可以完成想要传递到其他代码的某个动作,此时可以直接将方法传递过去。 格式:类名::方法名

变量作用域

lambda表达式的组成:

一个代码块 参数 自由变量的值,指的是非参数,且不再代码块中定义的值。

lanbda表达式变量引用的问题

只能引用变量不会改变的值的变量 lambda表达式的变量的作用域的范围和嵌套体有相同的作用域,所以不能有同名变量。 在lambda表达式中使用this关键字,这个this指的是创建这个lambda表达式的this参数。

处理lambda表达式

要接收一个lambda表达式需要一个函数式接口

repeat(10, ()->System.out.printin("Hello World")); public static void repeat(int n, Runnable action){ for(int i=0; i < 10; i++){ action.run(); } }
转载请注明原文地址: https://www.6miu.com/read-38293.html

最新回复(0)