黑马程序员——Lambda表达式简述
来源:互联网 发布:人工智能入门需要 编辑:程序博客网 时间:2024/06/08 02:01
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、概述
Lambda表达式(λ expression)是从Java8增加的新语法。大体上相当于其他语言的“匿名函数”或“函数指针。在Java中它实际上是“匿名类的一个实例”。
Lambda表达式的基本写法:参数->结果
参数是()或1个参数或 (多个参数)
结果是指 表达式 或 语句 或 {语句}
二、应用
1)线程例子
new Thread( ()->{ … } ).start();
2)积分例子
d = Integral( x->Math.sin(x), 0, 1, EPS );
d = Integral( x->x*x, 0, 1, EPS );
d = Integral( x->1, 0, 1, EPS );
3)按钮事件处理
btn.addActionListener( e->{ … } ) );
public doIt = new Runnable(){ public void run(){ System.out.println("aaa"); }};new Thread(dolt).start();
以上程序用Lambda表达式改写成一行代码:
new Thread(()->System.out.println("aaa")).start();
Lambda表达式是接口或者说是接口函数的简写。
double d = Integral(new Fun(){ public double fun(double x){ return Math.sin(x); }},0,Math.PI,1e-5);
使用Lambda表达式:
double d = Integral(x->Math.sin(x),0,Math.PI,1e-5);
由于Lambda表达式只能表示一个函数,所以能写成Lambda的接口要求包含且最多只能有一个抽象函数。这样的接口可以(但不强求)用注记@FunctionalInterface来表示。称为函数式接口。
/*函数式接口举例*/@FunctionalInterfaceinterface Fun {double fun(double x);}
/*实例:排序*/import java.util.*;class Person{ public String name; public int age; public double score; public Person(String n, int a, double s) { name = n; age = a; score = s; } public String getName(){ return name;} public String toString() { return String.format("%s[%d](%f)", name,age,score); } public static int better(Person p1, Person p2) { return (int)(p2.score - p1.score); }}class LambdaSortPerson { public static void main(String... args) { Person[] people = new Person[] { new Person("Ted", 18, 91), new Person("Charlotte", 19, 88), new Person("Michael", 20, 99), new Person("Matthew", 21, 84) }; Comparator<Person> compareAge = (p1, p2) -> p1.age-p2.age; Arrays.sort(people, compareAge); Arrays.sort(people, (p1, p2) -> p1.age-p2.age); Arrays.sort(people, (p1, p2) -> (int)(p1.score-p2.score)); Arrays.sort(people, (p1, p2) -> p1.name.compareTo(p2.name)); Arrays.sort(people, (p1, p2) -> -p1.name.compareToIgnoreCase(p2.name)); Comparator<Person> cf = Person::better; Arrays.sort(people, cf); Arrays.sort(people, Person::better); Arrays.sort(people, Comparator.comparing( Person::getName)); for (Person p : people) System.out.println(p); } }
由此可见,Lambda表达式不仅仅是简写了代码,更重要的是:它将代码也当成数据来处理。
0 0
- 黑马程序员——Lambda表达式简述
- 黑马程序员 一秒学会Lambda表达式
- 黑马程序员——Java语言简述
- 黑马程序员——JAVA简述
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员之C#学习笔记: Lambda表达式学习总结
- 黑马程序员——JAVA基础之简述设计模式
- 黑马程序员——JAVA基础之简述集合collection
- 黑马程序员——【C语言】重点指针的简述
- 黑马程序员——java中泛型的简述
- Fresco源码解析 - 创建一个ImagePipeline(一)
- MySQL CHAR VARCHAR 字段长度
- android-19 编译导致aapt.exe 停止工作
- 练习(模拟Java内省的功能)
- vim常用快捷键
- 黑马程序员——Lambda表达式简述
- android界面优化技巧
- 【错误集锦】VS按调试老是提示“项目已经过期”
- mysql函数
- 一般企业如何处理IOS 检查更新
- java UDP Socket
- mybatis,Dao层传递多个参数报错
- 使用shell判断路径或文件是否存在
- 面试题收集——Java基础部分(一)