Lambda表达式第一版

1、匿名内部类

package com.lambda;import java.util.Arrays;
import java.util.Comparator;public class LambdaDemo1 {public static void main(String[] args) {Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};Arrays.sort(arr, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1 - o2;}});System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9]}
}

2、Lambda表达式的完整格式

  • 函数式编程(Functional programming)是一种思想特点。
  • 面向对象:先找对象,让对象做事情。
  • Lambda表达式就是函数式思想的体现。
  • Lambda表达式是JDK8开始后的一种新语法形式。
  • ()对应着方法的形参
  •    -> 固定格式
  •    {}   对应着方法的方法体

2.1、注意点:

  • Lambda表达式可以用来简化匿名内部类的书写
  • Lambda表达式只能简化 函数式接口 的匿名内部类的写法
  • 函数式接口:有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注解
package com.lambda;import java.util.Arrays;public class LambdaDemo1 {public static void main(String[] args) {Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};Arrays.sort(arr, (Integer o1, Integer o2) -> {return o1 - o2;});System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9]}
}

3、Lambda表达式的省略写法

3.1、Lambda的省略规则:

  1. 参数类型可以省略不写。
  2. 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  3. 如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,需要同时省略。
package com.lambda;import java.util.Arrays;public class LambdaDemo1 {public static void main(String[] args) {Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};Arrays.sort(arr, (o1, o2) ->o1 - o2);System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9]}
}

 4、自定义匿名内部类

  • Lambda表达式的基本作用?        简化函数式接口的匿名内部类的写法。
  • Lambda表达式有什么使用前提?    必须是接口的匿名内部类,接口中只有一个抽象方法
  • Lambda的好处?                         Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。
package com.lambda;public class LambdaDemo2 {public static void main(String[] args) {method(new Swim() {@Overridepublic void swimming() {System.out.println("正在游泳~~~");}});}public static void method(Swim s) {s.swimming();}
}
@FunctionalInterface
interface Swim {public abstract void swimming();
}

4.1、利用Lambda表达式进行改写方式一

package com.lambda;public class LambdaDemo2 {public static void main(String[] args) {method(() -> {System.out.println("正在游泳~~~");});}public static void method(Swim s) {s.swimming();}
}@FunctionalInterface
interface Swim {public abstract void swimming();
}

4.2、Lambda表达式的省略写法

  • 省略核心:可推导,可省略

5、练习:Lambda表达式简化Comparator接口的匿名形式

  • 定义数组并存储一些字符串,利用Arrays中的sort方法进行排序
  • 要求:按照字符串的长度进行排序,短的在前面,长的在后面。(暂时不比较字符串里面的内容)
package com.lambda;import java.util.Arrays;public class LambdaDemo3 {public static void main(String[] args) {String[] arr = {"a", "aaaa", "aaa", "aa"};/*Arrays.sort(arr, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.length() - o2.length();}});*//*Arrays.sort(arr,(String o1,String o2)->{return o1.length() - o2.length();});*/Arrays.sort(arr,(o1,o2)->o1.length()-o2.length());System.out.println(Arrays.toString(arr));//[a, aa, aaa, aaaa]}}

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

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

相关文章

什么是伪类链(Pseudo-class Chaining)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Pseudo-class Chaining⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚…

(十九)大数据实战——Flume数据采集框架安装部署

前言 本节内容我们主要介绍一下大数据数据采集框架flume的安装部署&#xff0c;Flume 是一款流行的开源分布式系统&#xff0c;用于高效地采集、汇总和传输大规模数据。它主要用于处理大量产生的日志数据和事件流。Flume 支持从各种数据源&#xff08;如日志文件、消息队列、数…

Redis数据库持久化---RDB(Redis DataBase)概念与实操

一、概念 1redis提供了两种持久化的方式&#xff0c;分别是RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。 RDB&#xff08;Redis DataBase&#xff09;&#xff1a;是在不同的时间点&#xff0c;将redis存储的数据生成快照并存…

C++ 学习系列 -- 智能指针 make_shared 与 make_unique

一 make_shared 1.1 make_shared 是什么&#xff1f; c 11 中 引入了智能指针 shared_ptr&#xff0c;以及一个模板函数 make_shared 来生成一个制定类型的 shared_ptr。 1.2 引入 make_shared &#xff0c;解决了什么问题&#xff1f; make_shared的引入&#xff0c;主…

【计算机硬件CPU】

【计算机硬件CPU】 1、计算机硬件的五大单元2、一切设计的起点&#xff1a; CPU 的架构3、精简指令集 &#xff08;Reduced Instruction Set Computer, RISC&#xff09;4、复杂指令集&#xff08;Complex Instruction Set Computer, CISC&#xff09;5、例题&#xff1a;最新的…

Vue框架--Vue中el和data的两种写法

data与el的2种写法 1.el有2种写法 (1).new Vue时候配置el属性。 (2).先创建Vue实例&#xff0c;随后再通过vm.$mount(#root)指定el的值。 2.data有2种写法 (1).对象式 (2).函数式 如何选择&#xff1a;目前哪种写法都可以&#xff0c;以后学习到组件时&#xff…

Selenium基础 — CSS选择器定位大全

1、css属性定位 css选择器策略示例说明#id#telA选择id"telA"的所有元素。.class.telA选择 class"telA”的所有元素。[属性名属性值][nametelA]除了id和class属性&#xff0c;其他属性的定位格式[attribute][target]选择带有target 属性所有元素。**选择所有元素…

一些测试知识

希望能起到帮助&#xff0c;博主主页&#xff1a; https://blog.csdn.net/qq_57785602/category_12023254.html?spm1001.2014.3001.5482 软件测试理论 测试的依据&#xff1a; 需求&#xff0c;规格说明&#xff0c;模型&#xff0c;用户需求等 什么是软件测试 描述一种来…

Python Opencv实践 - 矩形轮廓绘制(直边矩形,最小外接矩形)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) #通过cv.threshold转换为二值图 ret,thresh cv.threshold(img_gray,…

手写Mybatis:第5章-数据源的解析、创建和使用

文章目录 一、目标&#xff1a;数据源的解析、创建和使用二、设计&#xff1a;数据源的解析、创建和使用三、实现&#xff1a;数据源的解析、创建和使用3.1 引入依赖3.2 工程结构3.3 数据源解析、创建和使用关系图3.4 事务管理接口和事务工厂3.4.1 事务的隔离级别3.4.2 定义事务…

ChatGPT⼊门到精通(3):ChatGPT 原理

OpenAI在2022年11⽉份发布ChatGPT&#xff0c;强⼤的⽂字对话、创意写作能⼒&#xff0c;全球掀起了⼀ 波AI浪潮。本⽂对ChatGPT的技术原理、厉害之处、可能的落地⽅向等⽅⾯进⾏了全⾯ 的解析&#xff0c;看完后会对ChatGPT有更深⼊的了解。 ⼀、前⾔ 2022年11⽉30⽇&#x…

libdrm全解析四十 —— 源码全解析(37)

接前一篇文章&#xff1a;libdrm全解析三十九 —— 源码全解析&#xff08;36&#xff09; 本文参考以下博文&#xff1a; DRM 驱动程序开发&#xff08;VKMS&#xff09; 特此致谢&#xff01; 前一篇文章讲解完了资源的释放流程中的munmap()和drmIoctl(DRM_IOCTL_MODE_DEST…

配置环境变量的作用

配置环境变量的作用 一般运行过程&#xff1a;寻找QQ.exe所在的目录&#xff0c;输入QQ.exe配置环境变量&#xff1a;把QQ所在的路径配给操作系统Path&#xff0c; 在任何路径下都能运行QQ.exe 举例&#xff1a; 定义变量&#xff1a;SCALA_HOME SCALA_HOME、JAVA_HOME 等这…

【论文精读】Learning Transferable Visual Models From Natural Language Supervision

Learning Transferable Visual Models From Natural Language Supervision 前言Abstract1. Introduction and Motivating Work2. Approach2.1. Creating a Sufficiently Large Dataset2.2. Selecting an Efficient Pre-Training Method2.3. Choosing and Scaling a Model2.4. P…

基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)

前言&#xff1a;本文为手把手教学ADC采样及各式滤波算法的教程&#xff0c;本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学&#xff0c;通过各式常见滤波的实验结果进行分析对比&#xff0c;搭配VOFA工具直观的展示滤波效果。ADC与滤波算法都是嵌入式较为…

第十六章 ObjectScript - 日期和时间值

文章目录 第十六章 ObjectScript - 日期和时间值日期和时间值当地时间UTC Time日期和时间转换$H 格式的详细信息 第十六章 ObjectScript - 日期和时间值 日期和时间值 当地时间 要访问当前进程的日期和时间&#xff0c;可以使用 $HOROLOG 特殊变量。因此&#xff0c;在许多 …

【FreeRTOS】信号量的相关函数使用及示例解释

FreeRTOS中的信号量是一种用于任务间同步的机制。它可以用来实现任务之间的互斥访问共享资源或者等待某个事件发生。 文章目录 信号量类型1. 二进制信号量&#xff08;Binary Semaphore&#xff09;&#xff1a;2. 计数信号量&#xff08;Counting Semaphore&#xff09;&…

python in excel 如何尝鲜 有手就行

众所周知&#xff0c;微软在8月下旬放出消息python已入驻excel&#xff0c;可到底怎么实现呢。 今天我就将发布python in excel的保姆级教程&#xff0c;开始吧&#xff01; 获取office 365 账号 首先我们要有微软office365 这时候需要再万能的某宝去找一个账号&#xff0c;…

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用&#xff0c;今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式&#xff1a; 如上图所示&#xff0c;第一种方式是Android.mkApplication.mkgradle的方式生成…

5.Redis-string

string 字符串 字符串类型是 Redis 最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; 1.⾸先Redis中所有 key 的类型都是字符串类型&#xff0c;⽽且其他⼏种数据结构也都是在字符串类似基础上构建的&#xff0c;例如 list 和 set 的元素类型是字符串类型。 2…