概念:Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
Lambda表达式的前提条件:
1.方法的参数或变量的类型是接口。
2.这个接口中只能有一个抽象方法。
Lambda的格式:
(参数类型 参数名称) -> { 代码体;
}
先上代码:
package com.jdktest01.day01;import java.util.ArrayList;
import java.util.Collections;/*** @author a1002*/
public class LambdaTest02 {public static void main(String[] args) {ArrayList<Person> persons = new ArrayList<>();persons.add(new Person("张三", 58, 174));persons.add(new Person("李四", 58, 176));persons.add(new Person("王五", 54, 171));persons.add(new Person("伞兵", 19, 177));// Collections.sort(persons, new Comparator<Person>() {
// @Override
// public int compare(Person o1, Person o2) {
// Age() - o2.getAge();
// }
// });// persons.forEach((p) -> {
// System.out.println(p);
// });System.out.println("===============================");Collections.sort(persons, (Person o1, Person o2) -> {Age() - o2.getAge();});Collections.sort(persons, (o1, o2) -> o2.getAge() - o1.getAge());persons.forEach((p) -> {System.out.println(p);});System.out.println("-----------------------------");persons.forEach(t -> System.out.println(t));// 对集合中的数据进行排序/*Collections.sort(persons, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {Age() - o2.getAge(); // 升序排序}});*/// Collections.sort(persons, (Person o1, Person o2) -> {
// Age() - o1.getAge(); // 降序
// });
//
// for (Person person : persons) {
// System.out.println(person);
// }
//
// System.out.println("-----------");
// persons.forEach((t) -> {
// System.out.println(t);
// });}
}
对集合中的数据进行排序:
Collections.sort(persons, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {Age() - o2.getAge();//升序}});
Lambda写法:
Collections.sort(persons, (Person o1, Person o2) -> {Age() - o2.getAge();});
简化:
Collections.sort(persons, (o1, o2) -> o2.getAge() - o1.getAge());
在Lambda标准格式的基础上,使用省略写法的规则为:
1. 小括号内参数的类型可以省略
2. 如果小括号内 有且仅有一个参数 ,则小括号可以省略
3. 如果大括号内 有且仅有一个语句 ,可以同时省略大括号、 return 关键字及语句分号
Lambda遍历写法:
persons.forEach((p) -> {System.out.println(p);});//简化
persons.forEach(t -> System.out.println(t));
函数式接口:
在java中是指:有且仅有一个抽象方法的接口。
函数式接口就是可以适用于lambda表达式的接口。
Lambda和匿名内部类的区别:
1.所需类型不一样:
匿名内部类所需要的类型可以是抽象类,接口。
lambda表达式需要的类型必须是接口。
2.抽象方法的数量不一样:
匿名内部类所需要的接口中抽象方法的数量随意。
lambda表达式所需要的接口只有一个抽象方法。
3.实现原理不同:
匿名内部类是在编译以后形成class。
lambda表达式是在程序运行时动态生成class。
本文发布于:2024-01-29 11:15:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649811914881.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |