【JDK 8-Lambda】3.1 Java高级核心玩转 JDK8 Lambda 表达式

2023-09-18 09:32:11

一、 什么是函数式编程 ?

二、 什么是lambda表达式?

1. 先看两个示例  

A.【创建线程】

B.【数组排序-降序】

2. lambda表达式特性

A. 使用场景(前提):

B. 语法

(params) -> expression

C. 参数列表

D. 方法体

F. 好处


一、 什么是函数式编程 ?

  • 将一个函数(也称“行为”)作为一个参数进行传递

  • 面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象 (将行为作为一个参数进行传递)

  • 支持版本:JDK 8 及以上

二、 什么是lambda表达式?

1. 先看两个示例  

A.【创建线程】
  • jdk8之前

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("【创建线程】jdk8之前");
            }
        }).start();
  • jdk8之后 Lambda表达式

new Thread(()-> System.out.println("【创建线程】jdk8之后 Lambda表达式")).start();
B.【数组排序-降序】
  •  jdk8之前

        List<String> list = Arrays.asList("aaa", "bbb", "ccc", "ddd");
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });

        System.out.println("jdk8之前写法:升序》");
        for (String s : list) {
            System.out.println( s);
        }
  • jdk8之后 Lambda表达式

        Collections.sort(list, (a, b) -> b.compareTo(a));
        System.out.println("jdk8之后lambda写法:降序》");
        for (String s : list) {
            System.out.println(s);
        }

2. lambda表达式特性

A. 使用场景(前提):
  • 一个接口中只包含一个方法,则可以使用Lambda表达式

  • 这样的接口称之为"函数接口"

B. 语法
(params) -> expression
  • 第一部分为括号内用 逗号分隔的形式参数,参数是函数式接口里面方法的参数

  • 第二部分为一个箭头符号:->;

  • 第三部分为 方法体可以是表达式和代码块

C. 参数列表
  • 括号中参数列表的数据类型可以省略不写

  • 括号中的参数只有一个,那么参数类型和()都可以省略不写

D. 方法体
  • 如果{}中的代码只有一行,无论有返回值,可以省略 {},return,分号

  • {},return,分号 要一起省略


        //两种写法等效
        Collections.sort(list, (a, b) -> b.compareTo(a));
        Collections.sort(list, (a, b) -> {
            return b.compareTo(a);
        });

F. 好处

  • Lambda 表达式的实现方式在本质是以匿名内部类的方式进行实现

  • 重构现有髓肿代码,更高的开发效率,尤其是集合Collection操作
     

更多推荐

聊一聊Twitter的雪花算法

什么是Twitter的雪花算法方法?这是一种在分布式系统中生成唯一ID的解决方案。Twitter在推文、私信、列表等方面使用这种方法。•ID是唯一且可排序的•ID包含时间信息(按日期排序)•ID适用于64位无符号整数•仅包含数字值符号位(1位):保留位(始终为0)。这可以为将来的请求保留。它可以潜在地用于使整体数字为正

vue柱状图+折线图组合

<template><divid="main"style="width:100%;height:500px;padding-top:.6rem"></div></template>data(){return{weekData:["1周","2周","3周","4周","5周","6周","7周","8周","9周","

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境为什么要写这个?封装这个控制台日志打印工具,主要是在项目中自己做的SDK需要提供给其他开发人员使用,加入了日志美化和打印打开,方便了开发人员查找SDK中的日志(提高了逼格),也加深了自己对日志关键性的理解。首先讲下封装时遇到的一些问题

【力扣】27. 移除元素

题目描述给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」

ddos打到高防cdn上会发生什么

ddos打到cdn上会发生什么?当DDoS攻击打到CDN上时,肯定会影响网站的可用性和用户体验。具体DDoS攻击打到CDN上时,会发生以下情况:CDN节点负载增加:DDoS攻击会导致大量的无效流量涌入CDN节点,从而使得节点负载增加。这可能会导致节点响应变慢,甚至出现崩溃、停止响应等情况。影响用户访问:如果DDoS攻击

ArcGIS Engine:C#基础语法的了解

目录01前言02实验2.1创建“HelloWorld”程序2.2创建程序,完成成绩评定功能2.3创建程序,完成1到100的累加2.4窗体应用程序01前言学了一些语言了,确实发现,语言只是工具,只有你作为初恋的语言值得你花大量时间去深究。而对于其他作为应用或者说只是作为桥梁的语言去学习其他内容的课程,没有必要过分深究语言

Spring Task

Spring框架提供了一套任务调度的功能,可以帮助开发者实现定时任务和异步任务的管理和调度。任务调度是指按照预定的时间表执行某个任务或一系列任务,Spring的任务调度模块可以在应用程序中方便地配置和管理这些任务。Spring框架中任务调度的核心是通过TaskScheduler接口和@Scheduled注解来定义和执行

OpenHarmony ArkTS工程目录结构(Stage模型)

一、应用工程结构图片来源:OpenHarmony官网AppScope>app.json5:应用的全局配置信息。entry:OpenHarmony工程模块,编译构建生成一个HAP包。src>main>ets:用于存放ArkTS源码。src>main>ets>entryability:应用/服务的入口。src>main>e

Java拦截器与过滤器的区别

主要结论:运行顺序不同,过滤器先,拦截器后配置方式不同,过滤器web.xml,拦截器spring的配置文件过滤器依赖于servlet,拦截器依赖于Spring过滤器只能对request和response响应,拦截器还能对springmvc生态下的组件做处理。(说人话就是咱们现在用的都是人家spring的产品,那么拦截器

golang入门笔记——pprof性能分析

文章目录简介runtime/pprof的使用命令行交互网络服务性能分析pprof与性能测试结合压测工具go-wrk简介golang性能分析工具pprof的8个指标1.性能分析的5个方面:CPU、内存、I/O、goroutine(协程使用情况和泄漏检查)、死锁检测以及数据竟态分析runtime.SetMutexProfi

天地图绘制区域图层

背景:业务方要求将原效果图参考效果图最终实现效果变更点:1.将原有的高德地图改为天地图2.呈现形式修改:加两层遮罩:半透明遮罩层mask+区域覆盖物mask实现过程:1.更换地图引入源<linkrel="stylesheet"href="https://cdn.jsdelivr.net/npm/maptalks/dis

热文推荐