JDK8新特性:lambda入门
2017-01-11 09:26
316 查看
之前的文章@FunctionalInterface已经介绍了函数式接口,现在我们来了解下JDK8大名鼎鼎的lambda。
lambda表达式的一般语法:
只要一个接口(必须是函数式接口)中的抽象方法,符合lambda表达式的定义,那么就可以通过lambda表达式创建其对象。比如下面的DogInterface和CatInterface都是一个函数式接口:
虽然接口中的方法名不同,但是方法的入参和返回值都是一样的,所以我们就可以使用相同的lambda表达式创建对象。
lambda表达式有各种简化版本,现在我们就学习下一下常见的简化写法。
1、入参的类型是可以省略的(当然加上也没有问题),因为可以从上下文环境中推断出lambda表达式的参数类型。
2、没有入参的时候,比如上面的Runnable接口,直接用()代表无参数。
3、当lambda表达式的参数个数只有一个,可以省略小括号。
4、当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。
Runnable traditionalRunnable = new Runnable() { @Override public void run() { System.out.println("traditionalRunnable"); } }; traditionalRunnable.run(); Runnable lambdaRunnable = () -> System.out.println("lambdaRunnable"); lambdaRunnable.run();traditionalRunnable是我们传统的做法,lambdaRunnable是使用了lambda表达式。两种创建Runnable对象的方法,可以明显看出lambda更加简洁。个人感觉:lambda其实就是为@FunctionalInterface服务的,能够用一种全新的、简洁的语法创建函数式接口的对象。当然如果一个接口不符合函数式接口的定义,是不能通过lambda表达式来创建其对象的。lambda其实就是定义入参、函数体、返回值,然后可以生成任意一个接口(符合该函数入参和返回值的函数式接口)的对象。
lambda表达式的一般语法:
(Type1 param1, Type2 param2, ..., TypeN paramN) -> { statment1; statment2; //............. return statmentM; }
只要一个接口(必须是函数式接口)中的抽象方法,符合lambda表达式的定义,那么就可以通过lambda表达式创建其对象。比如下面的DogInterface和CatInterface都是一个函数式接口:
@FunctionalInterface public interface CatInterface { void sayHello(); } @FunctionalInterface public interface DogInterface { void sayWelcome(); }
虽然接口中的方法名不同,但是方法的入参和返回值都是一样的,所以我们就可以使用相同的lambda表达式创建对象。
CatInterface cat = () -> {System.out.println("cat");} DogInterface dog = () -> {System.out.println("dog");} cat.sayHello(); dog.sayWelcome();
lambda表达式有各种简化版本,现在我们就学习下一下常见的简化写法。
1、入参的类型是可以省略的(当然加上也没有问题),因为可以从上下文环境中推断出lambda表达式的参数类型。
@FunctionalInterface public interface TwoArgsInterface { void add(int left, int right); } TwoArgsInterface twoArgs1 = (int a, int b) -> System.out.println("no argument"); // 省略参数类型 TwoArgsInterface twoArgs2 = (a, b) -> System.out.println("no argument");
2、没有入参的时候,比如上面的Runnable接口,直接用()代表无参数。
Runnable lambdaRunnable = () -> {System.out.println("lambdaRunnable");};
3、当lambda表达式的参数个数只有一个,可以省略小括号。
// 完整语法 OneArgsInterface oneArgs1 = (int a) -> System.out.println("arguments=" + a); // 省略参数类型 OneArgsInterface oneArgs2 = (a) -> System.out.println("arguments=" + a); // 最简洁的写法(省略类型和括号) OneArgsInterface oneArgs3 = a -> System.out.println("arguments=" + a);
4、当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。
// 完整写法 Runnable runnable1 = () -> { System.out.println("lambdaRunnable"); }; // 省略大括号和结尾的分号 Runnable runnable2 = () -> System.out.println("lambdaRunnable");
@FunctionalInterface public interface DemoInterface { double add(double right); } // 完整写法 DemoInterface way1 = a -> { return a * 10; }; // 省略return和大括号 DemoInterface way2 = a -> a * 10;
相关文章推荐
- android lambda语法简述
- Lambda的使用与实战
- java8-lambda语法
- Java StringUtils
- java web 学习杂记
- Spring view controller
- Myeclipse错误:Errors occurred during the build. Errors running builder 'Deployment
- Java中的两种单例模式--饿汉式和懒汉式
- java - 四种强弱软虚引用使用到的场景
- java中int和Integer什么区别
- Java 文件过滤工具(通用)
- java 数组及内存
- 【JVM读书笔记】- Java内存区域
- java 数据类型有哪些取值范围多少
- Java实现邮件发送(附件)
- 【Java每日一题】20170111
- 【Java每日一题】20170111
- Spring MVC配置详解(2)---bai
- Spring MVC配置详解(1)
- struts日期类型转换器