Java8 新特性Lambda表达式
2017-06-25 10:30
369 查看
摘要: Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替 功能接口。
Java8以后,可以使用Lambda来实现相同的功能
代码相当简洁,且调用的代码不用更改。
下面对每一种语法举例:
关于名称
lambda表达式所使用的运算符是 - > , 通过下面这个图形演变,你可以知道它为什么叫这个名字。实际上,lambda来源于λ演算。为何出现
Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码。在java8以前,很多语言都支持lambda表达式,Java8是使得这个世界上最流行的编程语言采用函数式编程的一次重大跨越。采用lambda使得java可以传递方法,可以写出更加简洁、更加灵活的代码。直观体验
Java中的匿名内部类是如何实现的public void testComparator(){ Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer x, Integer y) { return Integer.compare(x, y); } }; }
Java8以后,可以使用Lambda来实现相同的功能
public void testComparatorLam(){ Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y); }
代码相当简洁,且调用的代码不用更改。
语法格式
Java8中引入了新的操作符’->’,称之为箭头操作符。操作符将Lambda表达式分为两个部分:左侧为参数列表,右侧为Lambda体。序号 | 需求 | 格式 | 说明 |
---|---|---|---|
1 | 无参数,无返回值 | () -> System.out.println(“Helo”) | |
2 | 有一个参数,无返回值 | (x) -> System.out.println(x) | |
3 | 有一个参数,无返回值 | x -> System.out.print(x) | 参数小括号省略 |
4 | 有两个参数,多条语句 | (x, y) -> {code1 ; code2; code3 …} | 使用大括号 |
5 | 有一条语句,有返回值 | (x, y) -> Integer.compare(x, y) | 省略return |
6 | 参数类型可以省略,如果指定,必须全部指定 | (Integer x, Integer y) -> Integer.compare(x, y) |
package com.training.lambda; import java.util.Comparator; import java.util.function.Consumer; public class Grammar { public void testGrammar1_1(){ Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello"); } }; } public void testGrammar1_2(){ Runnable r = () -> System.out.println("World"); } public void testGrammar2() { Consumer con = (x) -> System.out.println(x); con.accept("一个参数,无返回值"); } public void testGrammar3() { Consumer con = x -> System.out.println(x); con.accept("一个参数,无返回值,小括号可以省略"); } public void testGrammar4(){ Comparator<Integer> com = (x, y) -> { System.out.println("两个参数,多条语句"); System.out.println("用大括号包起来"); return Integer.compare(x, y); }; } public void testGrammar5(){ Comparator<Integer> com = (x, y) -> Integer.compare(x, y); } public void testGrammar6(){ Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x, y); } }
使用说明
Lambda表达式需要函数式接口的支持,函数式接口是只有一个抽象方法的接口。java中已经有了一些函数式接口,如java.lang.Runnable和 java.util.Comparator,在java8中,新增加了几个函数式接口,如Consumer。java8提供 @FunctionalInterface作为注解,这个注解是非必须的,只要接口符合函数式接口的标准(即只包含一个方法的接口),虚拟机会自动判断, 但 最好在接口上使用注解@FunctionalInterface进行声明,以免团队的其他人员错误地往接口中添加新的方法。相关文章推荐
- Java 8新特性探究(一) JEP126特性lambda表达式和默认方法
- Java基础知识总结之1.8新特性lambda表达式
- android中使用java8新特性lambda表达式
- Java8新特性之lambda表达式
- java8新特性-lambda表达式
- Java8新特性——Lambda表达式
- Java8新特性Lambda表达式
- JAVA8新特性之:接口中默认方法和Lambda表达式
- Java 8th 新特性:lambda表达式
- Java 8新特性:lambda表达式
- Java8新特性-Lambda表达式
- Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
- Java8新特性Stream API与Lambda表达式详解(1)
- Java8新特性第1章(Lambda表达式)
- Java8新特性——Lambda表达式(二)Stream语法详解
- Java 8新特性探究(一) JEP126特性lambda表达式和默认方法
- Java 8新特性:全新的Stream API和lambda表达式
- Java 8 新特性之 Lambda表达式
- Java8新特性第1章(Lambda表达式)
- Java8新特性之(lambda表达式)