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

[java进阶]——方法引用改写Lambda表达式

🌈键盘敲烂,年薪30万🌈

目录

📕概念介绍:

⭐方法引用的前提条件:

1.引用静态方法

2.引用构造方法

①类的构造:

②数组的构造:

3.引用本类或父类的成员方法

①本类:

①父类:

4.引用其他类的方法

5.特定类的方法引用

🐒总结


📕概念介绍:

方法引用改写Lambda表达式可简化代码书写,方法引用就是调用已经拥有的方法,学习方法引用是必要的,在java的原码中你会经常看到它,在以后mybatis-plus的学习中会大量使用方法引用。

方法引用的前提条件:

  • 拥有函数式接口
  • 存在引用方法
  • 引用方法同抽象方法的作用相同
  • 引用的方法的形参和返回值类型要与抽象方法保持一致

1.引用静态方法

格式:类名::方法名

代码实现:

    //将集合中的元素转化为int类型并打印     List<String> list = new ArrayList<>();Collections.addAll(list, "2", "5", "4", "10");//Lambda方法list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s);}}).forEach(System.out::println);*///方法引用list.stream().map(Integer::parseInt).forEach(System.out::print);

2.引用构造方法

①类的构造:

    格式:类名::new

    注意:类里面要有对应的构造方法(参数名与抽象方法保持一致)

代码实现:

        //将集合里面的字符串封装称user对象//原始写法ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张无忌,18", "小昭,19");/*List<User> collect = list.stream().map(new Function<String, User>() {@Overridepublic User apply(String s) {String[] split = s.split(",");return new User(split[0], Integer.parseInt(split[1]));}}).collect(Collectors.toList());System.out.println(collect);*///引用构造方法//类名::newList<User> newlist = list.stream().map(User::new).collect(Collectors.toList());
②数组的构造:

    格式:数据类型名[]::new

代码实现:

        //数组的构造方法ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list, 1, 2, 3, 4);//原始方法Integer[] array = list.stream().toArray(new IntFunction<Integer[]>() {@Overridepublic Integer[] apply(int value) {return new Integer[value];}});//方法引用Integer[] array1 = list.stream().toArray(Integer[]::new);

3.引用本类或父类的成员方法

①本类:

    格式:this::方法名 (前提:非静态)

    注意:被引用方法一定不要是静态的,因为静态里面没有this和super关键字

代码实现:

    //升序排序public void testmethod1(){List<Integer> list = new ArrayList<>();Collections.addAll(list, 1, 2, 3, 4, 5);// 引用本类中非静态的 this::方法名list.stream().sorted(this::method1).forEach(System.out::print);}public int method1(int o1, int o2){return o2 - o1;}
①父类:

    格式:super::方法名(前提:非静态)

代码实现:

同上只是将this改为了super

4.引用其他类的方法

格式:对象名::方法名

    public static void main(String[] args) {//将集合中的数据封装成User对象//引用其他类型的方法ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张无忌,18", "小昭,19");List<User> newlist = list.stream().map(new Utils()::method).collect(Collectors.toList());System.out.println(newlist);}

5.特定类的方法引用

格式:类::方法名

注意:抽象方法的形参从第二个开始到最后与引用方法保持一致,第一个形参用于指明是什么类

代码演示:

        // 将字母转为大写//原始方法ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "aaa", "bbb", "ccc");List<String> collect = list.stream().map(new Function<String, String>() {@Overridepublic String apply(String s) {return s.toUpperCase();}}).collect(Collectors.toList());System.out.println(collect);//方法引用//类名::方法名//局限:只能引用抽象方法中第一个参数类型里面的方法//就像这里只能引用string里面的方法//注意 被引用方法的第二个到最后一个形参要与抽象方法保持一致List<String> newlist = list.stream().map(String::toUpperCase).collect(Collectors.toList());

🐒总结

相关文章:

  • Java-Hbase介绍
  • Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
  • 有了 C 语言的基础,怎么学 Java ?
  • C++ WINDOWS XP系统 读写锁
  • 【Vue】组件封装小技巧 — 利用$listener和v-on接收父组件传递的事件
  • ubuntu挂载共享目录的方法
  • 导出数据为zip压缩文件,解压后为json文件
  • 6-会话、过滤器、监听器
  • ZZ038 物联网应用与服务赛题第D套
  • 目前为止看过最帅气的一篇论文YOLOv3: An Incremental Improvement(2018.4)
  • Cuda cmake支持C++17
  • 学习笔记:利用CANOE Panel和CAPL脚本模拟主节点发送LIN通信指令
  • AI:63-基于Xception模型的服装分类
  • 大数据学习之Spark性能优化
  • USB HID在系统下通信的一些总结
  • ----------
  • Computed property XXX was assigned to but it has no setter
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • gf框架之分页模块(五) - 自定义分页
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript DOM 10 - 滚动
  • k8s 面向应用开发者的基础命令
  • Laravel Telescope:优雅的应用调试工具
  • python学习笔记-类对象的信息
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Boot MyBatis配置多种数据库
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vim 折腾记
  • windows下如何用phpstorm同步测试服务器
  • 翻译--Thinking in React
  • 利用jquery编写加法运算验证码
  • 使用Gradle第一次构建Java程序
  • 思否第一天
  • 微信小程序实战练习(仿五洲到家微信版)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一起参Ember.js讨论、问答社区。
  • 关于Android全面屏虚拟导航栏的适配总结
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (LeetCode 49)Anagrams
  • (八十八)VFL语言初步 - 实现布局
  • (多级缓存)多级缓存
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (十三)Maven插件解析运行机制
  • (循环依赖问题)学习spring的第九天
  • (一)Thymeleaf用法——Thymeleaf简介