Java中的lambda表达式详解
下文笔者讲述java中Lambda详细简介,如下所示
使用Lambda前后的效果
Lambda简介
Lambda表达式是JDK8开始后的一种新语法形式
Lambda功能
简化匿名内部类的代码写法
Lambda语法格式
(匿名内部类被重写方法的形参列表)->{ 被重写方法的方法体代码 } 注:->是语法形式,无实际意义 首先我们先定义一个抽象类 通过匿名内部类重写其方法 再对其进行简化 比较二者之间有何变化:例:
使用Lambda前后的效果
public static void main (String[] args){ People p = new People(){ @Override public void run(){ System.out.println("打印出相关信息!"); } }; p.run(); } abstract class People{ public abstract void run(); } 使用Lambda表达式之后 People p = ()->{ System.out.println("打印出相关信息!"); }; //此处会出现报错 //由于lambda只能简化函数式接口匿名内部类的写法形式 //且接口中有且仅有一个抽象方法 //我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。 例:实际意义上的Lambda简化 @FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法 interface People{ void run(); } //简化之前的匿名内部类 People p = new People(){ @Override public void run(){ System.out.println("打印输出信息"); } }; //简化之后 People p = () -> { System.out.println("打印输出信息"); }; 另外,也可以将其作为参数代入方法中去使用: //在原来的基础上定义一个pk方法 public static void pk(People p){ System.out.println("打印新") p.run(); } //不使用Lambda的情况下: pk(p);//需要在定义匿名内部类之后,将p代入; //使用Lambda的情况: People p = () -> { System.out.println("打印输出信息"); }; pk(() -> { System.out.println("打印输出信息"); }); //由于等号右边即是People创建的对象p,因此可以可以直接将其代入
Lambda的优点
Lambda是一个匿名函数 可以把Lambda表达式理解为是一段可以传递的代码 它可以写出更简洁、更灵活的代码 作为一种更紧凑的代码风格 使Java语言表达能力得到了提升
Lambda使用场景简介
//精简之前: Arrays.sort(grade,new Comparator<Integer>(){ @Override public int compare(Integer o1,Integer o2){ return o2 -o1; } }); //精简之后: Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); Lambda表达式省略规则 参数类型可以省略不写 //参考前面的实战例子 Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); //省略参数类型之后 Arrays.sort(grade,( o1, o2){ return o2 -o1; }); 如果只有一个参数,参数类型可以省略,同时()也可以省略 //简单引用一个单个参数的例子,不需要了解其具体含义 btn.addActionlistener((ActionEvent e) -> { System.out.println("我是简单的例子。"); }); //简化之后: btn.addActionListener( e -> { System.out.println("我是简单的例子。"); }); 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号 //参照上一条规则的例子 btn.addActionListener( e -> { System.out.println("我是简单的例子。"); }); //简化之后: btn.addActionListener( e -> System.out.println("我是简单的例子。") ); 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写 //参照第一条规则的代码 Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); //简化之后: Arrays.sort(grade,( o1, o2)-> o2 -o1);
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。