Java Lambda表达式的用法
Lambda 表达式是一个匿名函数(指的是没有函数名的函数),它基于数学中的
Lambda 表达式允许把函数作为一个方法的参数。Lambda 表达式的基本语法如下所示:
Lambda 的使用如下例所示:
为了与普通的接口区分开(普通接口中可能会有多个方法),JDK1.8 新增加了一种特殊的注解 @FunctionalInterface。下面给出一个函数式接口的定义:
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
λ
演算得名,直接对应于其中的 Lambda 抽象。Lambda 表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda 表达式允许把函数作为一个方法的参数。Lambda 表达式的基本语法如下所示:
(parameters) -> expression
或(parameters) ->{ statements; }
Lambda 的使用如下例所示:
Arrays.asList( 1, 7, 2 ).fbrEach( i -> System.out.println( i));以上这种写法中,i 的类型由编译器推测出来的,当然,也可以显式地指定类型,如下例所示:
Arrays.asList( 1, 7, 2 ).forEach( (Integer i) -> System.out.println( i));在 Java 8 以前,Java 语言通过匿名函数的方法来代替 Lambda 表达式。
示例
对于列表的排序,如果列表里面存放的是自定义的类,那么通常需要指定自定义的排序方法,传统的 Java 写法如下所示:import java.util.Arrays; import java.util.Comparator; class Person { public Person(String name, int age) { this.name = name; this.age = age; } private String name; private int age; public int getAge() { return age; } public String getName() { return name; } public String toString() { return name + ":" + age; } } public class Test { public static void main(String[] args) { Person[] people = {new Person("James", 25), new Person("Jack", 21)}; //自定义类排序方法,通过年龄进行排序 Arrays.sort(people, new Comparator<Person>() { @Override public int compare(Person a, Person b) { return a.getAge() - b.getAge(); } }); for (Person p : people) { System.out.println(p); } } }采用 Lambda 表达式后,写法如下所示:
Arrays.sort(people, (Person a, Person b) -> a.getAge()-b.getAge());
或Arrays.sort(people, (a, b) -> a.getAge()-b.getAge());
显然,采用 Lambda 表达式后,代码会变得更加简洁。Lambda
表达式是通过函数式接口(只有一个方法的普通接口)来实现的。函数式接口可以被隐式地转换为Lambda
表达式。为了与普通的接口区分开(普通接口中可能会有多个方法),JDK1.8 新增加了一种特殊的注解 @FunctionalInterface。下面给出一个函数式接口的定义:
@FunctionalInterface interface fun { void f(); }
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。