浅聊一下Lambda表达式

阅读: 评论:0

浅聊一下Lambda表达式

浅聊一下Lambda表达式

概念: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小时内删除。

标签:表达式   Lambda
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23