java学习(10) lambda表达式
来源:互联网 发布:服务器端 语言 python 编辑:程序博客网 时间:2024/05/22 08:10
参考连接:http://blog.csdn.net/renfufei/article/details/24600507/
Lambda表达式支持将代码块作为参数,可以使代码更加简洁。
Lmbda表达式语法: (parameters)->expression
下面是Java lambda表达式的简单例子:
// 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收2个int型整数,返回他们的和 (int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void) (String s) -> System.out.print(s)
接着看程序:
interface Eatable{ void taste();}interface Flyable{ void fly(String weather);}interface Addable{ int add(int a , int b);}public class LambdaQs{ // 调用该方法需要Eatable对象 public void eat(Eatable e) { System.out.println(e); e.taste(); } // 调用该方法需要Flyable对象 public void drive(Flyable f) { System.out.println("我正在驾驶:" + f); f.fly("【碧空如洗的晴日】"); } // 调用该方法需要Addable对象 public void test(Addable add) { System.out.println("5与3的和为:" + add.add(5, 3)); } public static void main(String[] args) { LambdaQs lq = new LambdaQs(); // 第一个 Lambda表达式的代码块只有一条语句,可以省略花括号。 lq.eat(()-> System.out.println("苹果的味道不错!")); // 第二个 Lambda表达式的形参列表只有一个形参,省略圆括号 lq.drive(weather -> { System.out.println("今天天气是:" + weather); System.out.println("直升机飞行平稳"); }); // 第三个 Lambda表达式的代码块只有一条语句,省略花括号 // 代码块中只有一条语句,即使该表达式需要返回值,也可以省略return关键字。 lq.test((a , b)->a + b); }}
上面程序展示了Lambda表达式的具体用法,上面第一个Lambda表达式相当于不带形参的匿名方法,由于该Lambda表达式的代码块只有一行代码,因此可以省略代码块的花括号; 第二个Lambda表达式相当于只带一个形参的匿名方法,由于它的形参列表只有一个形参,因此省略了圆括号;第三个Lambda表达式代码块中只有一行语句,这行语句返回值将作为该代码块的返回值。
上面程序种第一个Lambda处调用了eat()方法,他需要一个Eatable类型参数,但实际传入的是Lambda表达式;第二个Lambda处调用了drive()方法,其需要一个Flyable类型参数,但实际传入的是Lambda表达式;第三个Lambda表达式调用了test()方法,其需要一个Addable类型参数,但实际传入的也是一个Lambda表达式。 程序能正常运行说明 Lambda表达式实际上会被当成一个“任意类型”的对象,到底会被当成什么对象取决于运行环境的需要。
Lambda表达式与函数接口:
Lambda表达式的目标类型必须是“函数式接口”,函数式接口代表只包含一个抽象方法的接口,其它方法可以有多个。
注意:接口里的普通方法默认是抽象方法,所以可以不用在前面加上abstract修饰。
Runnable、ActionListener等接口都是函数式接口。
Lambda表达式有2个限制:
- Lambda表达式的类型必须是明确的函数式接口;
- Lambda表达式只能为函数式接口创建对象,Lambda表达式只能实现一个方法。
只是简单介绍了一下Lambda,更加深入的知识还需要继续学习,希望对大家有用,谢谢。
- java学习(10) lambda表达式
- java学习(lambda表达式)
- (Java)Lambda表达式简单入门学习
- java 8 lambda 表达式 学习
- Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
- JAVA 1.8 新特性学习(2) lambda表达式
- JAVA SE 8 学习笔记(一)lambda表达式
- Java-->Lambda表达式(转载)
- java lambda表达式 闭包学习笔记
- Java 8 学习–lambda表达式
- Java学习笔记——Lambda表达式
- Java 8学习之Lambda表达式
- Java 8特性学习 --- Lambda表达式
- java SE8学习(一)lambda表达式
- Java中Lambda表达式的学习
- Java表达式之Lambda表达式(二)
- VC2010开发学习(Lambda表达式)
- C#学习有感(Lambda表达式)
- JSP--整合SiteMesh02
- 魔法工会
- vin码OCR识别解析查询
- volatile关键字
- C++中的四类强制转换?
- java学习(10) lambda表达式
- 系统学习java高并发系列三
- Debug与Release的区别
- 进程
- 百度地图API之本地搜索与范围搜索
- TensorFlow【深度学习】安装Tensorflow与测试
- 【BZOJ3670】【NOI 2014】动物园(KMP)
- python---批量创建文件夹
- java 集合类