🎊专栏【JavaSE】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【The truth that you leave】
🥰欢迎并且感谢大家指出我的问题
文章目录
- 🍔概述
- 🍔注意
- 🎈如何确定是否是函数式接口
- 🍔示例
- 🎄方法引用的分类
- 🏳️🌈引用静态方法
- 🏳️🌈引用成员方法
- 🛸注意
- 🏳️🌈引用构造方法
- 🛸方法引用的规则:
- 🏳️🌈使用类名引用成员方法
- 🛸方法引用的规则:
- 🛸抽象方法形参的详解:
- 🛸局限性:
- 🏳️🌈引用数组的构造方法
- 🛸注意
- 🍔总结
- 🍔彩蛋
🍔概述
把已经有的方法拿过来用,作为函数式接口中抽象方法的方法体
使用::来引用
🍔注意
1.引用处需要是函数式接口
2.被引用的方法需要已经存在
3.被引用方法的形参和返回值需要跟抽象方法的形参和返回值保持一致
4.被引用方法的功能需要满足当前的要求
🎈如何确定是否是函数式接口
查看的是new后面的东西是否是函数式接口
🍔示例
对一个数组,进行倒序排序
方法引用
🎄方法引用的分类
🏳️🌈引用静态方法
格式:类名 :: 静态方法
例如:Integer::parseInt
🏳️🌈引用成员方法
格式:对象 :: 成员方法
例如
其他类:其他类对象 :: 方法名
本类:this :: 方法名
父类:super :: 方法名
🛸注意
静态方法是没有this的
所以下图会报错
🏳️🌈引用构造方法
格式:类名 :: new
例子:Student :: new
🛸方法引用的规则:
1.需要有函数式接口
2.被引用的方法必须已经存在
3.被引用方法的形参和返回值,需要跟抽象方法的形参返回值保持一致
4.被引用方法的功能需要满足当前的需求
Student.java
package com.itheima.a01myfunction; public class Student { private String name; private int age; public Student() { } public Student(String str) { String[] arr = str.split(","); this.name = arr[0]; this.age = Integer.parseInt(arr[1]); } public Student(String name, int age) { this.name = name; this.age = age; } /** * 获取 * @return name */ public String getName() { return name; } /** * 设置 * @param name */ public void setName(String name) { this.name = name; } /** * 获取 * @return age */ public int getAge() { return age; } /** * 设置 * @param age */ public void setAge(int age) { this.age = age; } public String toString() { return "Student{name = " + name + ", age = " + age + "}"; } }
FunctionDemo4.java
package com.itheima.a01myfunction; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class FunctionDemo4 { public static void main(String[] args) { /* 方法引用(引用构造方法) 格式 类名::new 目的: 创建这个类的对象 需求: 集合里面存储姓名和年龄,要求封装成Student对象并收集到List集合中 方法引用的规则: 1.需要有函数式接口 2.被引用的方法必须已经存在 3.被引用方法的形参和返回值,需要跟抽象方法的形参返回值保持一致 4.被引用方法的功能需要满足当前的需求 */ //1.创建集合对象 ArrayList
list = new ArrayList<>(); //2.添加数据 Collections.addAll(list, "张无忌,15", "周芷若,14", "赵敏,13", "张强,20", "张三丰,100", "张翠山,40", "张良,35", "王二麻子,37", "谢广坤,41"); //3.封装成Student对象并收集到List集合中 //String --> Student /* List newList = list.stream().map(new Function () { @Override public Student apply(String s) { String[] arr = s.split(","); String name = arr[0]; int age = Integer.parseInt(arr[1]); return new Student(name, age); } }).collect(Collectors.toList()); System.out.println(newList);*/ List newList2 = list.stream().map(Student::new).collect(Collectors.toList()); System.out.println(newList2); } } 🏳️🌈使用类名引用成员方法
格式:类名 :: 成员方法
例子:String :: substring
🛸方法引用的规则:
1.需要有函数式接口
2.被引用的方法必须已经存在
3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致。
4.被引用方法的功能需要满足当前的需求
🛸抽象方法形参的详解:
第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法
在Stream流当中,第一个参数一般都表示流里面的每一个数据。
假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法
第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法
🛸局限性:
不能引用所有类中的成员方法。
是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法。
🏳️🌈引用数组的构造方法
格式:数据类型[ ] :: new
例子:int[ ] :: new
🛸注意
数组的类型,需要跟流中数据的类型保持一致。
🍔总结
🍔彩蛋
猜你喜欢
- 11天前(希尔顿2021活动)希尔顿集团618盛夏大促开启
- 11天前(瑞虎7plus2021款)重塑10万级SUV价值标杆,全新一代瑞虎7PLUS冠军版给你惊喜
- 11天前(兵团猛进秦剧团持续开展“戏曲进校园”活动)兵团猛进秦剧团持续开展“戏曲进校园”活动
- 11天前(甘州区文化旅游局)2025甘津文旅资源对接推介会在兰州举办
- 11天前(甘肃文化旅游宣传片)甘肃文旅推介走进重庆
- 11天前(071 圣安东尼奥)秋季 圣安东尼奥交出了私藏活动清单
- 11天前(札幌小樽市)2024年暑期飞往北海道避暑吧!札幌小樽city walk路线推荐
- 11天前(纳米比亚旅游报价)纳米比亚旅游局2024年中国推介会圆满落幕
- 11天前(美诺酒店集团旗下臻选品牌m collection)美诺酒店集团启动盛橡品牌战略焕新 开启全球扩张新篇章
- 11天前(殷建祥简历)全国十大牛商解码:殷建祥如何用178天技术突围打造星空梦星空房
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章