Java—JDK8新特性—Lambda表达式【内含思维导图】

news2024/11/16 9:40:30

目录

JDK8新特性

2.Lambda表达式

思维导图

2.1 什么是Lambda表达式

2.2 为什么使用Lamdba表达式

2.3 Lambda表达式基本语法

2.4 类型推断

2.5 Lambda练习

2.6 Lambda常用场景


JDK8新特性

        官网提供网址:JDK 8 Features


2.Lambda表达式

思维导图

2.1 什么是Lambda表达式

        Lamdba是一个匿名函数,可以把Lamdba表达式理解为是一段可以传递的代码。使用它可以写出更简洁、灵活的代码。作为一种更紧凑风格,使Java语言表达能力得到提升

2.2 为什么使用Lamdba表达式

       更加简洁的编写方式


2.3 Lambda表达式基本语法

(参数类型 参数名称,...) -> {
        代码体;
        [return 值;]
    }

        (参数类型 参数名称,...) : 指定了Lambda表达式所需要的参数列表

        { }:指定了Lambda体,是抽象方法的实现逻辑,Lambda表达式要执行的功能

        ->:Lambda操作符,箭头操作符,分隔参数列表和Lambda体

2.4 类型推断

        Lambda表达式中的参数类型都是由编译器推断得出,Lambda表达式中无需指定类型,程序依然可以翻译。

        因为Javac会根据程序的上下文环境,在后台推断出参数类型,这就是“类型推断

2.5 Lambda练习

案例1:

interface Fiyable {
    void flying();
}

public class LambdaExpressionNoArg {
    public static void main(String[] args) {
        fly(new Fiyable() {
            @Override
            public void flying() {
                System.out.println("I can fly");
            }
        });

        //1.无参无返回值
        fly(() ->{
                System.out.println("I can fly");

        });
    }

    public static void fly(Fiyable f) {
        f.flying();
    }
}

运行结果:

如何使用Lambda表达式:

案例2:

interface Sayable{
    void say(String name);
}
public class LambdaExpressionOneArg {

    public static void main(String[] args) {
        talk(new Sayable() {
            @Override
            public void say(String name) {
                System.out.println("name:" + name);
            }
        });
        //2.一个参无返回值
        talk((String name) ->{
                System.out.println("name:" + name);
        });
        //3.数据类型可以省略
        talk(( name) ->{
            System.out.println("name:" + name);
        });
        //4.只有一个参数,括号可以省略
        talk( name ->{
            System.out.println("name:" + name);
        });
        //5,如果Lambda体只有一条语句,{}; 可以省略
        talk( name -> System.out.println("name:" + name));
    }

    public static void talk(Sayable sayable) {
        sayable.say("张三");
    }
}

 运行结果:

2.6 Lambda常用场景

        排序场景、

        如果一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式,用匿名实现类表示的地方都可以用Lambda表达式替换

案例3:

先定义一个Person类

/**
 * 对这个对象进行,按照年纪排序
 */
public class Person {
    private String name;
    private int age;
    private int height;

    public Person(String name, int age, int height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int getHeight() {
        return height;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}

在写一个LambdaExpressionExercise类,完成对Person对象,进行按照年龄排序

public class LambdaExpressionExercise {

    public static void main(String[] args) {

        List<Person> persons = new ArrayList<>();

        persons.add(new Person("张三",20,170));
        persons.add(new Person("李四",19,170));
        persons.add(new Person("王五",18,170));

//        Collections.sort(persons, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o1.getAge()-o2.getAge();
//            }
//        });

        Collections.sort(persons, (o1, o2) -> o1.getAge()-o2.getAge());

        for (Person person : persons) {
            System.out.println(person.toString());
        }
    }
}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/498040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈Dom和Bom(清晰易懂版)

DOM&#xff08;文档对象模型&#xff09; DOM 是浏览器提供的一种操作网页内容和结构的 API&#xff0c;它将 Web 页面表示为一个树形结构&#xff0c;其中每一个 HTML 元素都是一个节点&#xff0c;可以通过 DOM API 对其进行访问和操作。DOM API 包括了一系列方法和属性&am…

Shapes布局-文字环绕动画

文章目录 说明实现以及语法动画渐变裁切图形变换的动画效果 说明 Shapes也有形状、图形的意思&#xff0c;我们可以在页面中创建图形&#xff0c;并让内容环绕在定义的图形边上。 Shapes的官方文档&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Shapes/F…

YOLOv8 来了,快速上手实操

目录 YOLOv8的优点安装ultralytics使用YOLOv8n在图像上进行PredictTasks与 ModesModes - 模式分类Tasks - 任务分类 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;程序员半夏 , 一名全栈程序员&#xff0c;擅长使用各种编程语言和框架&#xff0c;如JavaScript、React、N…

SpringBoot集成Redis—缓存穿透解决方案与哨兵模式实战

目录 1、环境准备 1&#xff09;pom.xml引入Redis依赖 2) 演示业务场景 2、SpringBoot集成Redis单机模式 1&#xff09; 通过MyBatis逆向工程生成实体Bean和数据持久层 2) application.yml 中配置redis连接信息 3) 启动redis服务 4) XinTuProductRedisController类 5…

一图看懂 yarl 模块:为URL解析和更改提供了方便的URL类, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 yarl 模块&#xff1a;为URL解析和更改提供了方便的URL类, 资料整理笔记&#xff08;大全&#xff09; 摘要模块图类关系图模块全展开【yarl】统计常量模块1 yarl._quoting…

Python图形界面开发——系统资源监视器System-Monitor

Python图形界面程序怎么开发呢&#xff1f;很多人推荐python自带的tkinter自带库&#xff0c;还有pyqt这个这种拖拽式界面开发方案&#xff0c;但是他们开发界面比较难定制界面样式。现在web前端这么多框架用来开发python的图形界面其实不是很好&#xff1f;下面这么案例就是用…

Python爬虫 | 一文解决文章付费限制问题

本文概要 本篇文章主要介绍利用Python爬虫爬取付费文章&#xff0c;适合练习爬虫基础同学&#xff0c;文中描述和代码示例很详细&#xff0c;干货满满&#xff0c;感兴趣的小伙伴快来一起学习吧&#xff01; &#x1f31f;&#x1f31f;&#x1f31f;个人简介&#x1f31f;&…

项目内训(2023.5.6)

目录 Nacos是什么&#xff1f; 领域模型是什么&#xff1f; domain模块一般是干什么的&#xff1f; 在小乌龟中合并其他分支的作用是什么&#xff1f; nacos的配置文件 服务集群、服务提供、服务更加灵活庞大、消费服务、访问比较麻烦&#xff0c;A和B服务一起访问 系统结…

Qt5.9学习笔记-事件(四)Qt5.9中常见事件

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

5月1日 9H45min|5月2日 8H20min+30min|时间轴复盘

8:00 起床 8:00-8:30 洗漱吃饭 8:30-10:40 temporary pools阅读真题精读 (真的很慢了 不知道什么原因 感觉也没有彻底完全弄懂)【2h+10min】 10:40-11:10 午餐+酸奶(423+174KJ) 11:20-12:30 三篇阅读【1h+10min】 13:10-14:50 健身 14:50-15:45诵默写list…

【Stable Diffusion】ControlNet基本教程(四)

本文概要 接上篇【Stable Diffusion】ControlNet基本教程&#xff08;三&#xff09;&#xff0c;本篇再介绍两个ControlNet常见的基本用法&#xff1a;控制人物动作和建筑/室内生成。让人物摆出特定的动作&#xff0c;这是ControlNet最神级的操作&#xff01;这意味着可以自定…

密码学【java】初探究之springboo集成mybatis,swagger,数字签名

文章目录 项目环境一 swagger技术的补充1.1 [swagger](&#xff08;https://github.com/OAI/OpenAPI-Specification&#xff09;)介绍1.2 swagger的基础注解1.3 controller添加swagger注解 二 项目搭建2.1 创建数据库2.2 引入项目依赖2.3 配置数据库的连接2.4 配置swagger的配置…

USB 字节序,编码格式及位填充

字节序 LSB 发送一个字节时&#xff0c;先发送低位数据&#xff0c;再发送高位数据发送一个字时&#xff0c;先发送低字节数据&#xff0c;再发送高字节数据 例如&#xff1a; 发送 0x2D&#xff0c;发送的顺序为&#xff1a;10110100(低位在前&#xff0c;高位在后)发送 0…

项目前置准备

目录 项目前置准备 总体架构 CVPR2022是什么 一个项目架构图要如何进行看和学习呢&#xff1f;内容有点多有些摸不着头脑 我该如何理解架构图中的组件 Jenkins是什么&#xff1f; Docker是什么&#xff1f; FastDFS是什么&#xff1f; 项目前置准备 总体架构 CVPR2022是什…

golang grpc配置使用实战教程

什么是PRC&GRPC RPC是远程过程调用&#xff08;Remote Procedure Call&#xff09;的缩写形式, RPC 的主要功能目标是让构建分布式计算&#xff08;应用&#xff09;更容易&#xff0c;在提供强大的远程调用能力时不损失本地调用的语义简洁性。通俗地讲&#xff0c;使用RP…

软考 软件设计师 数据结构

大O表示法 常数阶&#xff0c;他的次数不会随着n的变大而变长 抓大头 取次方最大的 时间复杂度 没有循环 没有递归没有跟n相关的东西&#xff0c;那么他的复杂度就是o&#xff08;1&#xff09; 为什么ii*2那里会加1阿&#xff1f; 因为需要加一次才能跳出循环1 2 4 8 中间加…

有趣的回文检测

英文中有很多的回文词&#xff0c;回文词的拼法十分有趣&#xff0c;无论是从前往后拼读&#xff0c;还是从后往前拼读&#xff0c;他们的拼法和词义都不变。例如&#xff1a;dad&#xff08;爸爸&#xff09;&#xff0c;mum&#xff08;妈妈&#xff09;&#xff0c;noon&…

flac格式怎么转换mp3格式?

flac格式怎么转换mp3格式&#xff1f;什么是flac格式呢&#xff1f;通常来说&#xff0c;flac是一种无损音频压缩编码。flac格式主要特点就是无损压缩。对于flac格式而言&#xff0c;与其他有损压缩编码不同&#xff0c;比如与aac、mp3等相较而言&#xff0c;flac对原有的音频信…

PySide6/PyQT多线程之 生命周期:从创建到销毁的完整解析

前言 在PySide6/PyQT 中使用多线程时&#xff0c;多线程生命周期是一个重要的概念。如果不能正确地管理多线程生命周期&#xff0c;可能会导致程序崩溃、内存泄漏等问题。 在前面的文章中有介绍到 PySide6/PyQT 可以实现多线程的多个类&#xff0c; 有 QObject、QThread、QRun…

【C++刷题笔记】继承和多态常见面试题汇总

对C继承和多态方面的部分面试题进行了汇总 一、概念考察 1. 下面哪种面向对象的方法可以让你变得富有( ) A: 继承 B: 封装 C: 多态 D: 抽象 2. ( )是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关&#xff0c;而对方法的调用则可以关联于具体…