JDK8新特性之方法引用【 ::】

news2024/11/20 18:22:39

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于方法引用的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.是什么

二.为什么要用

三.什么时候用

四.怎么用

常见的引用方式


一.是什么

  •  符号表示: “ ::”
  • 是一种引用运算符,它所在的表达式称为方法引用 

二.为什么要用 

  • 1.简化代码
    • 方法引用可以将复杂的代码逻辑简化,让代码更加简洁,达到更高的可读性和可维护性。代码变得更加集中,从而减少了重复代码,更方便管理和修改。
  • 2.提高可读性
    • 使用方法引用可以提高代码的可读性。当我们使用方法引用时,代码更加简洁,更加易于理解,降低了代码的抽象程度,让代码读起来更像自然语言。这有助于加快代码的开发和维护速度。
  • 3.方便修改
    • 当需要修改某个方法时,如果代码中使用了方法引用,我们只需修改引用的那个方法即可,而不必修改其它代码。这样使得修改更加方便、快捷,不会影响其它逻辑,降低了出错的风险。
  • 4.支持lambda表达式
    • 方法引用是使用lambda表达式来表示的。因为lambda表达式是Java 8中引入的新技术,可以实现更加简单和灵活的代码编写。只需要一行代码,就可以将一个方法作为参数传递给另外一个方法,非常方便。

三.什么时候用

如果lambda表达式所要实现的额方案,已经有其他方法存在相同方案,那么则可以使用方法引用

四.怎么用

        实例:以strem流中的foreach为例

常见的引用方式

接口名 ::方法名

类名::静态方法

类名::普通方法

类名::new 调用的构造器               

示例:

 

​
package com.wh.test;

public class Person {
private int pid;
private String pname;

public Person() {
	// TODO Auto-generated constructor stub
}

public Person(int pid, String pname) {
	super();
	this.pid = pid;
	this.pname = pname;
}



public Person(int pid) {
	super();
	this.pid = pid;
}

public int getPid() {
	return pid;
}

public void setPid(int pid) {
	this.pid = pid;
}

public String getPname() {
	return pname;
}

public void setPname(String pname) {
	this.pname = pname;
}

@Override
public String toString() {
	return "Person [pid=" + pid + ", pname=" + pname + "]";
}

public void show() {
	System.out.println("我是好人😊😊");
}

public void show(String address) {
	System.out.println("我是"+address+"好人😊😊");
}


}

​
package com.wh.test;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * 分别使用lambda表达式和方法引用来完成示例
 * 
 * @author W
 *
 */
public class Demo1 {

	public static void main(String[] args) {
		// 无参构造
		Supplier<Person> p1 = () -> new Person();
		Supplier<Person> p2 = Person::new;

		// 有参构造
		Function<Integer, Person> p3 = pid -> new Person(pid);
		Function<Integer, Person> p4 = Person::new;

		// 类数组
		Function<Integer, String[]> p5 = len -> new String[len];
		Function<Integer, String[]> p6 = String[]::new;

		// 基本类型数组
		Function<Integer, int[]> p7 = len -> new int[len];
		Function<Integer, int[]> p8 = int[]::new;

		// 调用方法【空参】
		Consumer<Person> p9 = p -> p.show();
		Consumer<Person> p10 = Person::show;

	}
}

      好啦,今天的分享就到这了,希望能够帮到你呢! 😊😊                

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

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

相关文章

chrome录制保存网络请求

有时候&#xff0c;需要与同事共同查看网络请求&#xff0c;但是现场往往环境限制&#xff0c;导致无法访问环境。在这里推荐一种利用chrome保存网络请求的方法。 准备&#xff1a; 1. chrome浏览器&#xff08;最好版本号是62以上&#xff09; chrome浏览器越新越好(最新稳定…

rsarsa

数学很酷&#xff01;使用RSA算法对秘密消息进行解码&#xff0c;c&#xff0c;p&#xff0c;q&#xff0c;e是RSA算法的参数。 RSA算法还不太了解&#xff0c;经过这段时间的学习&#xff0c;得知 q和p是最开始选择的两个质数&#xff0c;主要是为了计算出钥匙n e是在1到φ(n)…

服务器编程:数据库连接池

引言&#xff1a; 数据库连接池和线程池的思想一样&#xff0c;是为了避免频繁创建和销毁数据库连接导致的性能开销。如果一个项目频繁的需要访问数据库&#xff0c;那么它就有可能需要频繁的创建/销毁数据库连接&#xff0c;那么我们可以采用数据库连接池的技术&#xff0c;在…

Docker中搭建RabbitMQ集群

Docker中搭建RabbitMQ集群 1、启动三个RabbitMQ容器2、为容器设置节点2.1、设置Erlang Cookie2.2、设置节点12.3、设置节点22.4、设置节点32.5、预览结果 3、配置镜像队列3.1、配置镜像的原因3.2、搭建步骤 1、启动三个RabbitMQ容器 服务器IP端口hostname管理界面地址192.168.…

IoC容器的设计(利用反射、注解和工厂模式实现)

1.实验要求 利用注解、反射和工厂模式设计一个简单的IoC容器该IoC容器包含3个注解和一个IoC容器类&#xff08;AnnotationConfigApplicationContext&#xff09;&#xff0c;其定义如下&#xff1a; 注解&#xff1a; 注解含义Component标注BeanAutowired标注需要被注入的对…

如何写好一份企业直播主题策划?

写一份好的直播主题策划&#xff0c;需要考虑包括目标受众、目的、内容、形式、互动等&#xff0c;下面是写企业直播主题策划的一些关注点&#xff0c;希望能帮到您。 定位您直播的目标受众 明确你的直播主题适合的目标受众是谁&#xff0c;他们的兴趣、需求和期望是什么。了解…

OAuth2,jwt,springsecurity之间的区别和联系

OAuth 2.0、JWT (JSON Web Token) 和 Spring Security 是安全相关的概念和技术&#xff0c;它们有着不同的功能和用途。 OAuth 2.0&#xff08;开放授权&#xff09;&#xff1a; OAuth 2.0 是一种授权框架&#xff0c;用于授权第三方应用程序访问用户资源&#xff0c;而无需共…

【OpenCV DNN】Flask 视频监控目标检测教程 10

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 10 3.10 OpenCV DNNFlask实时监控目标检测1、加载MobileNet SSD模型2、导入分类名称文件3、处理视频帧进行目标检测4、新建一个Flask项目5、Python 程序文件6、视频流的网…

linux系统addr ip以及ifconfig查询不到ip地址解决方法,没有ens33

先看使用情况 网上一堆垃圾博文解决方案都是你抄我我抄你&#xff0c;一点用没有&#xff0c;都说使用 vi /etc/sysconfig/network-scripts/ifcfg-ens33 来更改配置ONBOOT为yes&#xff0c;改个屁&#xff0c;给你们看看我目前的配置&#xff0c;劳资本身就是yes&#xff0c;还…

Elasticsearch 基本使用(二)简单查询 嵌套查询

查询数据 简单查询按id查询单条记录查询所有数据设置排序filter 过滤查询数组内的值查询 嵌套查询查询一个外层字段 内的嵌套字段查询多个字段&#xff0c;其中有嵌套字段 简单查询 按id查询单条记录 GET bank/_doc/1查询所有数据 默认只查询10条记录 GET bank/_search {&q…

Linux任务调度、磁盘分区、挂载

一、任务调度介绍 任务调度是指系统在某个时间执行的特定的命令或程序 任务调度分为两类&#xff1a; 1.系统工作&#xff1a;有些重要的工作必须周而复始的执行&#xff0c;比如病毒扫描 2&#xff0c;个别用户工作&#xff1a;个别用户可能希望执行某些程序&#xff0c;比如…

canvas自定义绘制顺序解决遮挡问题

canvas自定义绘制顺序解决遮挡问题 1. 问题场景2. 解决思路3. 实现代码 1. 问题场景 使用canvas绘制进行要素叠加时&#xff0c;往往会出现不是按照先画的在下面&#xff0c;后画的在最上面这样的顺序进行叠加显示。原因就是由于图片大小不同导致绘制或加载的时间不一样&#…

合宙Air724UG Cat.1模块硬件设计指南--LCD专用SPI接口

概述 Air724UG支持一路LCD专用SPI接口&#xff0c;用于驱动SPI LCD屏幕&#xff0c;不能作为通用SPI使用 特性&#xff1a; 最大支持320240分辨率&#xff0c;30帧 内置图像处理单元GOUDA 支持格式&#xff1a; YUV4 : 2 : 0 ;YUV4 : 2 : 2;RGB565; ARGB8888 目前只支持4线8bi…

MySQL - 第8节 - MySQL复合查询

1.基本查询回顾 准备测试表&#xff1a; • 下面给出三张表&#xff0c;分别是员工表&#xff08;emp&#xff09;、部门表&#xff08;dept&#xff09;和工资等级表&#xff08;salgrade&#xff09;。 • 后续所要进行的查询操作都将以这三张表作为数据源&#xff0c;包括基…

【论文笔记】BEIT:BERT PRE-TRAINING OF IMAGE TRANSFORMERS

GitHub 1.介绍 1.1 挑战 视觉转换器的输入单元&#xff0c;即图像补丁&#xff0c;没有预先存在的词汇。预测遮罩面片的原始像素往往会在预训练短程依赖性和高频细节上浪费建模能力 1.2 回顾一下Bert的基本架构和流程 输入编码&#xff1a;通过tokenizer将输入的文本中的每…

gmpy2

简介 gmpy2是一个Python扩展模块&#xff0c;是对GMP的封装&#xff0c;它的前身是gmpy。 GMP&#xff08;即GNU高精度算术运算库&#xff09;&#xff0c;它是一个开源的高精度运算库&#xff0c;其中不但有普通的整数、实数、浮点数的高精度运算&#xff0c;还有随机数生成&a…

【promptulate专栏】使用ChatGPT和XMind快速构建思维导图

本文节选自笔者博客&#xff1a;https://www.blog.zeeland.cn/archives/ao302950h3j &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#…

Go语言基础:标识符、关键字、变量、常量、iota

一、标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词&#xff0c;比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线&#xff09;组成&#xff0c;并且只能以字母和_开头。 二、关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符…

ThreadPoolExecutor的应用和源码分析

前面描述的线程池的创建方式大都是Executors类中创建出来&#xff0c;基于ThreadPoolExecutor去new出来实现的。 我们为什么要自定义线程池 在线程池ThreadPoolExecutor中提供了7个参数&#xff0c;都作为非常核心的属性&#xff0c;在线程池去执行任务的时候&#xff0c;每个…

【Docker】容器化和虚拟化基础

Docker发展史 Jail(监狱)时代 1979 年 贝尔实验室发明 chroot chroot的设计原理是&#xff1a;把一个进程的文件系统隔离起来。 ​ chroot 系统调用可以将进程及其子进程的根目录更改为文件系统中的新位置。隔离以后&#xff0c;该进程无法访问到外面的文件&#xff0c;因此这…