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

方法引用详解

什么是方法引用?:针对于函数式接口中的抽象方法

为什么用方法引用?:避免代码的重复,简便书写,提高效率

在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作

那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑呢?答案肯定是没有必要

方法引用格式符号:  ::

方法引用的条件?:必须遵循

方法引用的分类:

1.引用静态方法

1.1 格式 

1.2 示例

为什么调用parseInt?符合方法调用要求,与函数式接口中的抽象方法形式相同,如下面的对比图

2.引用成员方法

2.1格式:其他类要创建成员对象

因为静态方法中,没有this,非要引用本类的静态成员方法的话:new 本类 ::方法名

3.引用构造方法

3.1 格式

3.2 示例

不使用方法引用:

使用方法引用:

添加符合方法引用的构造方法:

why:无需考虑对象的创建? answer:构造方法实现后自动会创建对象

4.特殊:使用类名调用成员方法

4.1 格式

特殊点:采用"使用类名调用成员方法"的引用方法时,stream流中的数据类型决定了我可以使用哪个类,不可以任意选择类,只能选择和stream流中的数据类型相同的

4.2 示例

不使用方法引用:Map是要改的主体

使用方法引用:

疑惑点:并不符合引用方法条件为啥也能用?

采用"使用类名调用成员方法"的引用方法时,参考这条:

map中第一个参数是string,而没有第二个参数,所以是无参的,而toUpperCase是无参的,

并且只能使用string类中的成员方法!!!

可以理解为:所以必须使用和stream中数据相同的类型的类

5.特殊:引用数组的构造方法

5.1 格式:就是生成一个:该数据类型的数组

5.2 示例:

不使用方法引用:

使用方法引用:直接integer::new

6.三道练习题

public class Test1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"张三,23","李四,24","王五,25","大的的,27");list.stream().map(new Function<String, Student>() {@Overridepublic Student apply(String s) {return new Student(s.split(",")[0],Integer.parseInt(s.split(",")[1]));}});//将map的抽象方法使用:方法引用list.stream().map(Student::new).toArray(new IntFunction<Student[]>() {@Overridepublic Student[] apply(int value) {return new Student[value];}});//将toArray的抽象方法使用:方法引用Student[] arr = list.stream().map(Student::new).toArray(Student[]::new);System.out.println(Arrays.toString(arr));}
}

在student中:新写了一个构造方法,方便Map引用

重写tostring方法:

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

相关文章:

  • Apache Seata 高可用部署实践
  • nginx配置尝试
  • SAR目标检测
  • 创新配置,秒级采集,火爆短视频评论抓取
  • STL—容器—string类【对其结构和使用的了解】【对oj相关练习的训练】
  • 讲个SystemVerilog随机约束小坑
  • mysql在windows下的安装
  • uniapp 在手机上导出excel
  • 收银系统源码-收银台副屏广告
  • 【TORCH】torch.normal()中的size参数
  • 【第20章】MyBatis-Plus逻辑删除支持
  • 【IT领域新生必看】 Java编程中的重载(Overloading):初学者轻松掌握的全方位指南
  • python转文本为语音并播放
  • 解锁高效软件测试:虚拟机助力提升测试流程的秘诀
  • 创建vue3项目
  • 中国网络安全审查认证和市场监管大数据中心数据合规官CCRC-DCO
  • Web漏洞扫描工具AppScan与AWVS测评及使用体验
  • 瞰景Smart3D使用体验分享
  • Android系统adb shell dumpsys activity processes
  • vue侦听器watch()
  • 如何用Python向PPT中批量插入图片
  • C# Socket
  • node的下载、安装、配置和使用(node.js下载安装和配置、npm命令汇总、cnpm的使用)
  • 深度卷积神经网络 AlexNet
  • 【刷题汇总--大数加法、 链表相加(二)、大数乘法】
  • 基于Java的网上花店系统
  • uniApp 封装VUEX
  • 最长公共子序列求长度和输出子序列C代码
  • 安卓Framework开发快速分析日志及定位源码
  • 数据结构算法之B树