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

《Java-SE-第三十五章》之方法引用

前言

在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!”

博客主页:KC老衲爱尼姑的博客主页

博主的github,平常所写代码皆在于此

共勉:talk is cheap, show me the code

作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


文章目录

  • 方法引用
    • 1. 静态方法引用
    • 2. 引用对象的实例方法
    • 3. 引用类的实例方法
    • 4. 构造器引用


方法引用

Java8引入了方法引用,其使用场景是,当我们使用lambda时,如果方法体中只有一个方法调用(包括构造方法),我们可以使用方法引用进一步简化代码。Java8中提供了四种不同类型的方法引用:静态方法引用,实例方法引用,构造方法引用。下面我们就来介绍这些方法引用。

1. 静态方法引用

基本格式:类名::方法名

使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中,这个时候我们就可以引用类的静态方法。

示例代码

public class Demo8 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("张三", "2222"), new User("李四", "3333"), new User("王五", "4444"));List<Integer> collect = users.stream().map(user -> user.getPassword()).map(Integer::valueOf).collect(Collectors.toList());System.out.println(collect);}
}

2. 引用对象的实例方法

基本格式:对象名::方法名

使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用对象的实例方法

示例代码

public class Demo8 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("张三", "2222"), new User("李四", "3333"), new User("王五", "4444"));StringBuilder sb= new StringBuilder();//创建对象users.stream().map(user->user.getUsername()).forEach(sb::append);//使用方法}
}

3. 引用类的实例方法

基本格式:类名::方法名

使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法中剩余的所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用类的实例方法。

示例代码

public class Demo9 {public static String subAuthorName(String str, UseString useString){int start = 0;int length = 1;return useString.use(str,start,length);}public static void main(String[] args) {subAuthorName("bbbb", String::substring);}interface UseString{String use(String str,int start,int length);}
}

4. 构造器引用

​ 如果方法体中的一行代码是构造器的话就可以使用构造器引用。

基本格式:类名::new

使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的构造方法,并且我们把要重写的抽象方法中的所有的参数都按照顺序传入了这个构造方法中,这个时候我们就可以引用构造器。

示例代码

public class Demo8 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("张三", "2222"), new User("李四", "3333"), new User("王五", "4444"));users.stream().map(User::getUsername).map(StringBuilder::new).map(sb->sb.append("cdd").toString()).forEach(System.out::println);}
}

各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!。
在这里插入图片描述

http://www.lryc.cn/news/121564.html

相关文章:

  • Effective Java笔记(33)优先考虑类型安全的异构容器
  • 释放AI创作潜能:从大模型训练到高产力应用
  • Ajax 笔记(一)—— Ajax 入门
  • Android Studio跳过Haxm打开模拟器
  • 从一个GPU到多个GPU
  • 小白编写一个Chrome
  • 自然语言处理学习笔记(六)————字典树
  • WPF实战项目十一(API篇):待办事项功能api接口
  • ffmpeg给视频添加时间水印,准确且不模糊
  • ① vue复习。从安装到使用
  • 【Linux】多线程——线程引入 | 线程控制
  • 查询树形目录(内存遍历成树返回)
  • Easys Excel的表格导入(读)导出(写)-----java
  • 纯净版ISO镜像下载大全(Windows、Linux、mac)
  • VMware上的Centos设置静态IP
  • 【MySQL】数据库的基本操作
  • Spring整合MyBatis(详细步骤)
  • Linux:Shell编程之正则表达式
  • Python Opencv实践 - 图像缩放
  • 大脑营行|“福安市华龙教育基金”支持家乡教育事业发展
  • Windows 2016安装Jenkins
  • 章节4:Burp Target模块
  • CAN总线一些经典的现场故障
  • VS+QT+Opencv使用YOLOv4对视频流进行目标检测
  • oracle创建管理用户并授权
  • ​三江学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》
  • 机器学习笔记 - 基于PyTorch + 类似ResNet的单目标检测
  • 系列二、Redis简介
  • 基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集
  • 尼科彻斯定理-C语言/Java