day26 java lambda

lambda

lambda表达式 :对匿名内部类的对象的一种简写lambda表达式的格式 : (形参列表) -> {方法体}说明 :-> : lambda操作符

例::Comparator

原代码:

        Collections.sort(list, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return 0;}});

lambda可以写为:

        //lambda表达式(本质就是匿名内部类的对象 - 只不过是对匿名内部类的对象的一种简写)Comparator<Integer> c2  = (Integer o1, Integer o2) -> {return 0;};Collections.sort(list,c2);

进一步缩写

* 当{Lambda体}中只有一句语句时,可以省略{}和{;}
* 当{Lambda体}中只有一句语句时,并且这个语句还是一个return语句,那么{、return、;}三者可以省略。它们三要么一起省略,要么都不省略。
* 当Lambda表达式(形参列表)的类型已知,获取根据泛型规则可以自动推断,那么(形参列表)的数据类型可以省略。
* 当Lambda表达式(形参列表)的形参个数只有一个,并且类型已知或可以自动推断,则形参的数据类型和()可以一起省略,但是形参名不能省略。
* 当Lambda表达式(形参列表)是空参时,()不能省略

例1:

        Collections.sort(list,(Integer o1, Integer o2) -> {return 0;});//=====================Collections.sort(list,(Integer o1, Integer o2) -> 0);

例2:

        Comparator<Integer> c3 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1 - o2;}};//当Lambda表达式(形参列表)的类型已知,获取根据泛型规则可以自动推断,那么(形参列表)的数据类型可以省略。//lambdaComparator<Integer> c4 = (o1,o2) -> o1 - o2;

函数式接口:

只有一个抽象方法的接口叫作函数式接口

如果有和Object类中一样的方法的抽象方法也可以,因为所有类都是Object类中的子类,继承了其所有方法只用看其其他抽象方法就好。

说明:

1.lambda表达式只能是函数式接口

2.函数式接口中只能一个抽象方法(如果有和Object类中一样的方法的抽象方法也可以)

3.函数式接口中可以有默认方法和静态方法(也可以有常量)

4.可以在接口上使用注解@FunctionalInterface判断接口是否为函数式接口

例:下面的接口不能使用lambda表达式 因为不是一个函数式接口


//@FunctionalInterface - 报错因为不是函数式接口
interface MyInterface<T>{void say(T t,T t2);void show(T t);
}

方法的引用对

lambda表达式的进一步简化

当Lambda表达式满足一些特殊的情况时,还可以再简化:(1)Lambda体只有一句语句,并且是通过调用一个对象的/类现有的方法来完成的(2)并且Lambda表达式的形参正好全部用上,Lambda体中没有额外的数据参与方法的引用的格式实例对象名::实例方法类名::静态方法类名::实例方法

例1:类名::实例方法

    @Testpublic void test4(){//匿名对部类的对象new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {//比较两个字串的内容/*public int compareTo(String anotherString) {}*/return o1.compareTo(o2);}};//lambda表达式Comparator<String> s = (o1,o2) -> o1.compareTo(o2);//方法的引用Comparator<String> s2 = String::compareTo;

例2:实例对象名::实例方法

    @Testpublic void test3(){//匿名内部类的对象new Consumer<String>() {@Overridepublic void accept(String s) {/*public void println(String x) {}*/PrintStream ps = System.out;ps.println(s);}};//lambda表达式Consumer<String> c = s -> System.out.println(s);//方法的引用Consumer<String> c2 = System.out::println;

类的引用和数组的引用

public class LambdaTest2 {/*类的引用:类名::new*/@Testpublic void test(){//匿名内部类的对象new Function<Integer, Person>() {@Overridepublic Person apply(Integer integer) {//1.new的对象正好是抽象方法的返回值类型  2.抽象方法的形参正好是构造器要传的实参return new Person(integer);}};//lambda表达式Function<Integer, Person> f = i -> new Person(i);//类的引用Function<Integer, Person> f2 = Person::new;}/*数组的引用:数组的类型::new*/@Testpublic void test2(){//匿名内部类的对象new Function<Integer, int[]>() {@Overridepublic int[] apply(Integer integer) {//1.创建的数组正好是抽象方法的返回值类型  2.抽象方法的形参正好是数组的长度return new int[integer];}};//lambda表达式Function<Integer, int[]> f = i -> new int[i];//数组的引用Function<Integer, int[]> f2 = int[] :: new;}
}class Person{public Person(int a){System.out.println("public Person(int a)");}
}

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

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

相关文章

DELL PowerEdge服务器通过iDRAC升级BIOS遇到的问题

本文对PowerEdge 12G系统&#xff0c;也就是iDRAC 7版本升级BIOS中遇到的几个问题做个总结&#xff0c;对于其他版本理论上应该也是适用的。如果还遇到其他问题&#xff0c;可以添加VX&#xff0c;VX号为 StorageExpert 进行进一步的分析探讨。 第一个问题&#xff0c;成功下载…

Android 11 裁剪系统显示区域(适配异形屏)

概述 在显示技术中&#xff0c;"OverScan"&#xff08;超扫描&#xff09;是一种调整显示图像边界的技术。通常情况下&#xff0c;OverScan 会在显示屏的边缘周围裁剪一小部分图像。这种裁剪是为了确保显示内容在屏幕上的完整可见性&#xff0c;尤其是在老式电视或投…

ZABAPGIT问题,导入github上的程序包时报 DBSQL_DUPLICATE_KEY_ERROR

跟踪程序发现在94050行 INSERT seocompotx FROM TABLE it_descriptions 报的错 刚开始&#xff0c;不想着改动他&#xff0c;把seocompotx 表的数据做下指定清楚&#xff0c;但是5次清楚后&#xff0c;果断注释掉 改成 MODIFY seocompotx FROM TABLE it_descriptions。 在用…

航片水体空洞修补

水体空洞情况如下图所示&#xff1a; 水体空洞修补结果如下图所示&#xff1a; 操作视频教程&#xff1a; MCM智拼图软件V8.5-漏洞空洞修补-水体修补_哔哩哔哩_bilibili

鸿蒙OpenHarmony【小型系统 编译】(基于Hi3516开发板)

编译 OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式&#xff0c;build.sh脚本编译方式请参考[使用build.sh脚本编译源码]。 使用build.sh脚本编译源码 进入源码根目录&#xff0c;执行如下命令进行版本编译。 ./build.sh --product-name name --ccache 说明&…

基于LDLT分解求解Ax=b

前置知识&#xff0c;矩阵 A T ∗ A A^T * A AT∗A的性质&#xff1a; 实对称性&#xff1a;如果 A A A是实矩阵&#xff0c;那么 A T ∗ A A^T * A AT∗A是实对称矩阵。这意味着 ( A T ∗ A ) T A T ∗ ( A T ) T A T ∗ A (A^T * A)^T A^T * (A^T)^T A^T * A (AT∗A)…

基于数据挖掘的斗鱼直播数据可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着网络直播平台的兴起&#xff0c;斗鱼直播作为其中的佼佼者&#xff0c;吸引了大量用户和观众。为了更好地理解和分析斗鱼直播中的数据&#xff0c;本项目介绍了一个基于数据挖掘的斗鱼直播数据…

【AI导师写作】毕业论文答辩PPT生成

无论是大专、本科或者硕博&#xff0c;撰写毕业论文、开题报告、文献综述、任务书、课程论文、调研报告等都是必不可少的一件事。而这些任务重往往都需要我们花费大量的时间和精力&#xff0c;而“AI导师写作”在这一方面无疑提供了高效和便捷。可毕业季的论文答辩也是每个学者…

C#调用skiasharp实现绘制并拖拽图形

SkiaSharp是基于.net的跨平台二维图形库&#xff0c;封装的谷歌的Skia库&#xff0c;SkiaSharp支持在以下平台或运行时中使用&#xff0c;能够在图片中绘图&#xff0c;也提供控件在Winform、WPF等使用。本文学习skiasharp在Winform的基本用法&#xff0c;并参照参考文献5实现绘…

【Java那些年系列-启航篇 04】Java程序架构:深入理解类与对象的设计原则

作者名称&#xff1a;纸飞机-暖阳 作者简介&#xff1a;专注于Java和大数据领域&#xff0c;致力于探索技术的边界&#xff0c;分享前沿的实践和洞见 文章专栏&#xff1a;Java那些年专栏 专栏介绍&#xff1a;本专栏涵盖了 Java SE从基础语法到面向对象编程&#xff0c;从异常…

一键PDF水印添加工具

一键PDF水印添加工具 引言优点1. 精准定位与灵活布局2. 自由旋转与透明度调控3. 精细化页码选择4. 全方位自定义水印内容5. 无缝整合工作流程 功能详解结语工具示意图【工具链接】 引言 PDF作为最常用的文档格式之一&#xff0c;其安全性和版权保护显得尤为重要。今天&#xff…

(delphi11最新学习资料) Object Pascal 学习笔记---第10章第3节( 委托的概念)

10.3.2 委托的概念 ​ 乍一看&#xff0c;委托这项技术的目标可能并不明确&#xff0c;但它却是Object Pascal 组件技术的基石之一。秘密就在委托这个词上。如果有人创建了一个对象&#xff0c;这个对象有一些方法指针&#xff0c;那么你只需把新的方法赋值给这些指针&#xf…

[移动端] “viewport“ content=“width=device-width, initial-scale=1.0“ 什么意思

布局视口, 代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>body,html {margin: 0;padding: 0;}.box {width: 200px;height: 200px;background-color: pi…

数据库基础:理解与应用索引与视图

文章目录 前言 索引视图 前言 数据库管理涉及索引、视图。本基础篇不涵盖索引和视图的高级应用和核心概念。 索引 MySQL索引是提高查询性能的数据结构&#xff0c;类似于书籍目录&#xff0c;帮助数据库快速找到数据行&#xff0c;避免全表扫描。索引可应用于单列或多列&a…

vue 项目关于不同分辨率的电脑网页适配方案

流式布局&#xff1a;这是一种相对灵活的布局方式&#xff0c;页面的元素宽度使用相对宽度&#xff08;例如百分比&#xff09;来定义&#xff0c;而不是使用绝对宽度&#xff08;例如像素&#xff09;。这样&#xff0c;当浏览器窗口大小变化时&#xff0c;元素会自动调整大小…

CocoaPods使用详解

CocoaPods使用详解 引言 在iOS开发过程中&#xff0c;第三方库的集成是一个常见的需求。CocoaPods作为一个流行的依赖管理工具&#xff0c;能够大大简化这一过程。它允许开发者通过一个名为Podfile的配置文件来管理项目中的第三方库。本文将详细介绍CocoaPods的安装、基本使用…

Linux学习_09-Linux的用户管理

账号和用户组 系统管理员的主要工作就是管理账号。我们先来了解一下linux系统是如何识别每个用户的。 用户标识符&#xff1a;UID和GID linux的用户至少有2个ID&#xff0c;也就是UID用户ID和GID用户组ID。虽然登录的时候输入的是用户名&#xff0c;但其实系统识别的是这个两…

机器学习理论基础—集成学习(1)

机器学习理论基础—集成学习 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务&#xff0c;有时也称为多分类系统等。 分类&#xff1a; 根据集成学习中的个体学习器的不同可以分为同质集成&#xff08;集成的学习器相同例如全部是决策树&#xff09;&#xff0c…

视频通话实时换脸:支持训练面部模型 | 开源日报 No.235

iperov/DeepFaceLive Stars: 19.7k License: GPL-3.0 DeepFaceLive 是一个用于 PC 实时流媒体或视频通话的人脸换装工具。 可以使用训练好的人脸模型从网络摄像头或视频中交换面部。提供多个公共面部模型&#xff0c;包括 Keanu Reeves、Mr. Bean 等。支持自己训练面部模型以…

字符串类型漏洞之updatexml函数盲注

UPDATEXML 是 MySQL 数据库中的一个函数&#xff0c;它用于对 XML 文档数据进行修改和查询。然而&#xff0c;当它被不当地使用或与恶意输入结合时&#xff0c;它可能成为 SQL 注入攻击的一部分&#xff0c;从而暴露敏感信息或导致其他安全漏洞。 在 SQL 注入攻击中&#xff0…