当前位置: 首页 > news >正文

Java_25_方法引用

方法引用

方法引用:
方法引用是为了进一步简化Lambda表达式的写法。
方法引用的格式:类型或者对象::引用的方法。
关键语法是:“::”

 小结:方法引用可以进一步简化Lambda表达式的写法。关键语法是:“::”

范例代码:

public class MethodDemo01 {public static void main(String[] args) {List<Student> stu = new ArrayList<>();Student st1 = new Student("Java01");Student st2 = new Student("Java02");Student st3 = new Student("Java03");Collections.addAll(stu,st1,st2,st3);stu.forEach(System.out::println);  //方法引用简化!!}
}
class Student {private String name;public Student() {}public Student(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String toString() {return name;}
}

静态方法引用

  1. 方法引用有四种形式:

    1. 静态方法的引用。
    2. 实例方法的引用。
    3. 特定类型方法的引用。
    4. 构造器引用。
  2. 静态方法的引用。

    1. 引用格式:
      类名::静态方法。
    2. 简化步骤:
      1. 定义一个静态方法,把需要简化的代码放到一个静态方法中去。
    3. 静态方法引用的注意事项
      ” 重要:被引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致。“ 小结:
      静态方法引用的格式: 类名::静态方法。
      重要:被引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致,才可以引用简化!
public class MethodDemo02 {public static void main(String[] args) {List<Student> str = new ArrayList<>();Student s1 = new Student("李铭",18,'男');Student s2 = new Student("冯龙",23,'男');Student s3 = new Student("王乐乐",21,'男');Collections.addAll(str,s1,s2,s3);System.out.println(str);Collections.sort(str,Student::compareByAge); //简化System.out.println(str);}
}

实例方法引用

  1. 实例方法的引用
  2. 格式: 对象::实例方法。
  3. 简化步骤:
    a.定义一个实例方法,把需要的代码放到实例方法中去。
    实例方法引用的注意事项
  4. 重要:被引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致
public class MethodDemo01 {public static void main(String[] args) {List<String> lists = new ArrayList<>();lists.add("java1");lists.add("java2");lists.add("java3");// 对象是 System.out = new PrintStream();// 实例方法:println()// 前后参数正好都是一个lists.forEach(s -> System.out.println(s));lists.forEach(System.out::println);}
}

特定类型方法的引用

  1. 特定类型方法的引用。
  2. 特定类型:String ,任何类型。
    格式:特定类型::方法。
  3. 注意:
    如果第一个参数列表中的形参中的第一个参数作为了后面的方法的调用者,
    并且其余参数作为后面方法的形参,那么就可以用特定类型方法引用了。
public class MethodDemo01 {public static void main(String[] args) {String[] strs = new String[]{"James", "AA", "John","Patricia","Dlei" , "Robert","Boom", "Cao" ,"black" ,"Michael", "Linda","cao","after","sBBB"};// public static <T> void sort(T[] a, Comparator<? super T> c)// 需求:按照元素的首字符(忽略大小写)升序排序!!!Arrays.sort(strs, new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {return s1.compareToIgnoreCase(s2);// 按照元素的首字符(忽略大小写)比较。}});Arrays.sort(strs, (String s1, String s2) -> {return s1.compareToIgnoreCase(s2);// 按照元素的首字符(忽略大小写)比较。});Arrays.sort(strs, ( s1,  s2 ) ->  s1.compareToIgnoreCase(s2));// 特定类型的方法引用:Arrays.sort(strs,  String::compareToIgnoreCase);System.out.println(Arrays.toString(strs));}
}

构造器引用

格式是:类名::new。
注意点:前后参数一致的情况下,又在创建对象就可以使用构造器引用
s -> new Student(s) => Student::new

小结:
方法引用是可遇不可求,能用则用,不能用就不要用!

public class ConstructorDemo01 {public static void main(String[] args) {List<String> lists = new ArrayList<>();lists.add("java1");lists.add("java2");lists.add("java3");// 集合默认只能转成Object类型的数组。Object[] objs = lists.toArray();System.out.println("Object类型的数组:"+ Arrays.toString(objs));// 我们想指定转换成字符串类型的数组!!// 最新的写法可以结合构造器引用实现 。// default <T> T[] toArray(IntFunction<T[]> generator)String[] strs = lists.toArray(new IntFunction<String[]>() {@Overridepublic String[] apply(int value) {return new String[value];}});String[] strs1 = lists.toArray(s -> new String[s] );String[] strs2 = lists.toArray(String[]::new);System.out.println("String类型的数组:"+ Arrays.toString(strs2));}
}

相关文章:

Java_25_方法引用

方法引用 方法引用&#xff1a; 方法引用是为了进一步简化Lambda表达式的写法。 方法引用的格式&#xff1a;类型或者对象::引用的方法。 关键语法是&#xff1a;“::” 小结&#xff1a;方法引用可以进一步简化Lambda表达式的写法。关键语法是&#xff1a;“::”范例代码&…...

QT基于TCP协议实现数据传输以及波形绘制——安卓APP及Windows程序双版本

文章代码有非常非常之详细的解析&#xff01;&#xff01;&#xff01;诸位可放心食用 这个玩意我做了两个&#xff0c;一个是安卓app&#xff0c;一个是Windows程序。代码并非全部都是由我从无到有实现&#xff0c;只是实现了我想要的功能。多亏了巨人的肩膀&#xff0c;开源…...

mac 中 brctl 怎么用

mac 中 brctl 怎么用 mac 中 brctl 怎么用1.使用 Homebrew 安装 bridge2.安装完成后&#xff0c;你可以使用 bridge 命令来管理网络桥接。 mac 中 brctl 怎么用 在 macOS 中&#xff0c;没有官方提供的 brctl 命令行工具。但是&#xff0c;你可以使用一个名为 bridge 的开源工…...

20.2 HTML 常用标签

1. head头部标签 <head>标签用于定义网页的头部, 其中的内容是给浏览器读取和解析的, 并不在网页中直接显示给用户. <head>标签通常包含以下一些常见的子标签: - <title>: 定义网页的标题, 在浏览器的标题栏或标签页上显示. - <meta>: 用于设置网页的…...

mysql_2.5——【约束】详解

1、查看约束 SHOW CREATE TABLE table_name 2、主键约束(PRIMARY KEY) 主键约束最显著的特征是主键列中的值是不允许重复(唯一)的&#xff0c;通过主键约束可强制表 的实体完整性。当创建或更改表时可通过定义 primary key 约束来创建主键。一个表只 能有一个primary key约束…...

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…...

opencv顺时针,逆时针旋转视频并保存视频

原视频 代码 import cv2# 打开视频文件 video cv2.VideoCapture(inference/video/lianzhang.mp4)# 获取原视频的宽度和高度 width int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建视频编写器并设置输出视频参数 fourcc …...

【LeetCode】最小路径和

最小路径和 题目描述算法流程编程代码 链接: 最小路径和 题目描述 算法流程 编程代码 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();vector<vector<int>> dp(m1,vector<in…...

zygote forkSystemServer及systemServer启动

###zygote forkSystemServer方法 通过上一篇文章我们了解到zygote 在ZygoteInit.java类的main方法中调用forkSystemServer方法 UnsupportedAppUsagepublic static void main(String[] argv) {ZygoteServer zygoteServer null;....省略部分代码//根据环境变量(LocalServerSocke…...

享元模式-提供统一实现对象的复用

下围棋时&#xff0c;分为黑白棋子。棋子都一样&#xff0c;这是出现的位置不同而已。如果将每个棋子都作为一个独立的对象存储在内存中&#xff0c;将导致内存空间消耗较大。我们可以将其中不变的部分抽取出来&#xff0c;只存储它的位置信息来实现节约内存。 图 围棋 1 享元模…...

Jenkins工具系列 —— 在Ubuntu 18.04上安装各种版本OpenJDK

文章目录 安装java方式一、使用apt-get工具安装方式二、手动安装java 卸载java各种版本OpenJDK安装包下载 安装java 方式一、使用apt-get工具安装 1、安装各种JAVA版本 若要安装新版本的java11&#xff0c;安装命令&#xff1a; sudo apt install default-jre若选择安装jav…...

vue基础-虚拟dom

vue基础-虚拟dom 1、真实dom目标2、虚拟dom目标 1、真实dom目标 在真实的document对象上&#xff0c;渲染到浏览器上显示的标签。 2、虚拟dom目标 本质是保存节点信息、属性和内容的一个JS对象 更新会监听变化的部分 给真实的DOM打补丁...

C#时间轴曲线图形编辑器开发2-核心功能实现

目录 三、关键帧编辑 1、新建Winform工程 &#xff08;1&#xff09;界面布局 &#xff08;2&#xff09;全局变量 2、关键帧添加和删除 &#xff08;1&#xff09;鼠标在曲线上识别 &#xff08;2&#xff09;键盘按键按下捕捉 &#xff08;3&#xff09;关键帧添加、删…...

【Git】初始化仓库配置与本地仓库提交流程

目录 一、仓库配置邮箱与用户名 二、本地仓库提交流程 一、仓库配置邮箱与用户名 【Git】Linux服务器Centos环境下安装Git与创建本地仓库_centos git仓库搭建_1373i的博客-CSDN博客https://blog.csdn.net/qq_61903414/article/details/131260033?spm1001.2014.3001.5501 在…...

学习day53

今天主要是做一个案例 TodoList 组件化编码流程&#xff1a; 1. 拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突 2.实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a…...

【最短路算法】SPFA

引入 在计算机科学的世界里&#xff0c;算法就像是星空中的繁星&#xff0c;各自闪烁着智慧的光芒。它们沉默而坚定&#xff0c;像是一群不语的哲人&#xff0c;默默地解答着世界的问题。 算法的步骤&#xff0c;如同优美的诗行&#xff0c;让复杂的问题在流转的字符中得以释…...

牛客网Verilog刷题——VL48

牛客网Verilog刷题——VL48 题目答案 题目 在data_en为高期间&#xff0c;data_in将保持不变&#xff0c;data_en为高至少保持3个B时钟周期。表明&#xff0c;当data_en为高时&#xff0c;可将数据进行同步。本题中data_in端数据变化频率很低&#xff0c;相邻两个数据间的变化&…...

Unity UGUI的Shadow(阴影)组件的介绍及使用

Unity UGUI的Shadow(阴影)组件的介绍及使用 1. 什么是Shadow(阴影)组件&#xff1f; Shadow(阴影)组件是Unity UGUI中的一个特效组件&#xff0c;用于在UI元素上添加阴影效果。通过调整阴影的颜色、偏移、模糊等属性&#xff0c;可以使UI元素看起来更加立体和有层次感。 2. …...

Kubernetes系列

文章目录 1 详解docker,踏入容器大门1.1 引言1.2 初始docker1.3 docker安装1.4 docker 卸载1.5 docker 核心概念和底层原理1.5.1 核心概念1.5.2 docker底层原理 1.6 细说docker镜像1.6.1 镜像的常用命令 1.7 docker 容器1.8 docker 容器数据卷1.8.1 直接命令添加1.8.2 Dockerfi…...

同步锁: synchronized

synchronized 1. synchronized的特性2. synchronized的使用3. synchronized的锁机制 1. synchronized的特性 原子性: 所谓原子性就是指一个操作或者多个操作&#xff0c;要么全部执行并且执行的过程不会被任何因素打断&#xff0c;要么就都不执行。可见性: 可见性是指多个线程…...

告别激活弹窗:KMS_VL_ALL_AIO智能激活工具完全指南

告别激活弹窗&#xff1a;KMS_VL_ALL_AIO智能激活工具完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗&#xff1f;每次开机都看到"需要激活"的提…...

从零到一:在个人PC上部署并集成ChatGLM-6B到Unity应用

1. 环境准备与模型下载 在个人PC上部署ChatGLM-6B需要先搞定三件事&#xff1a;硬件检查、软件环境搭建和模型文件获取。我的老款游戏本&#xff08;i7-9750H RTX2060 6GB显存&#xff09;实测可以流畅运行&#xff0c;关键在于正确的量化配置。 硬件检查要点&#xff1a; 显存…...

如何在Mac上轻松导出微信聊天记录:WeChatExporter完整指南

如何在Mac上轻松导出微信聊天记录&#xff1a;WeChatExporter完整指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而焦虑&#xff1f…...

Qdrant Python客户端全解析:从向量数据库连接到AI应用开发实战

1. 项目概述&#xff1a;从向量数据库到客户端&#xff0c;现代AI应用落地的关键拼图如果你最近在折腾大语言模型应用&#xff0c;或者想给自己的产品加上一个“智能大脑”&#xff0c;那你大概率已经听过“向量数据库”这个词了。简单来说&#xff0c;它就像一个专门为AI模型设…...

CircuitPython Web Workflow实战:无线开发Yoto Mini与I2C硬件验证

1. 项目概述与核心价值如果你玩过像树莓派Pico或者ESP32这类微控制器&#xff0c;肯定对“插拔-编程-调试”这个循环不陌生。每次改几行代码&#xff0c;就得拔下USB线&#xff0c;重新上电&#xff0c;然后盯着串口监视器看输出。这个过程在项目初期调试硬件时&#xff0c;尤其…...

基于RAG的电影智能体构建:从向量检索到Agentic设计

1. 项目概述&#xff1a;一个能聊电影的智能体最近在GitHub上看到一个挺有意思的项目&#xff0c;叫tomasonjo/llm-movieagent。光看名字&#xff0c;你大概能猜到&#xff0c;这是一个和电影、和大型语言模型&#xff08;LLM&#xff09;相关的智能体。简单来说&#xff0c;它…...

Vim-ai插件深度指南:在Vim中无缝集成AI提升开发效率

1. 项目概述&#xff1a;当Vim遇上AI&#xff0c;一场编辑器生产力的革命如果你和我一样&#xff0c;是个在终端里泡了十多年的老Vim用户&#xff0c;那你一定经历过这样的场景&#xff1a;面对一个复杂的函数重构&#xff0c;手指在键盘上飞舞&#xff0c;:s、%s、宏录制轮番上…...

基于RAG的智能知识库问答系统:从原理到部署实战

1. 项目概述&#xff1a;当AI大模型遇见知识库&#xff0c;一个开源的智能问答解决方案 最近在折腾一个很有意思的开源项目&#xff0c;叫 zhimaAi/chatwiki 。光看名字&#xff0c;你大概能猜到它的核心&#xff1a; chat 代表对话&#xff0c; wiki 代表知识库。没错&a…...

基于意图与技能解耦的智能对话系统构建指南

1. 项目概述&#xff1a;一个意图与技能驱动的AI对话引擎最近在折腾AI应用开发&#xff0c;特别是对话型AI助手时&#xff0c;发现一个核心痛点&#xff1a;如何让AI不仅能理解用户说了什么&#xff08;意图识别&#xff09;&#xff0c;还能精准地调用相应的功能&#xff08;技…...

LC正弦波振荡器原理、设计与调试:从巴克豪森判据到电路实战

1. 从直流到交流&#xff1a;正弦波振荡器的核心价值与分类在电子电路的世界里&#xff0c;我们常常需要将稳定的直流电源&#xff0c;转换成特定频率和幅度的交流信号。这个看似“无中生有”的过程&#xff0c;正是正弦波振荡器的核心使命。无论是你手机里的无线通信模块、收音…...