[Java][方法引用]综述以及静态/成员中的其他与本类方法讲解
2023-12-17 14:18:37
方法引用的知识层次的构建: 1.引用静态方法 2.引用成员方法 2.1 引用<其他类>的成员方法 2.2 引用<本类>的成员方法 2.3 引用<父类>的成员方法 3.引用构造方法 4.其他的调用方式 4.1 使用<类名>引用<成员方法> 4.2 引用<数组>的<构造方法>
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;
public class Main{
public static void main(String[] args){
/*
方法引用的知识层次的构建:
1.引用静态方法
2.引用成员方法
2.1 引用<其他类>的成员方法
2.2 引用<本类>的成员方法
2.3 引用<父类>的成员方法
3.引用构造方法
4.其他的调用方式
4.1 使用<类名>引用<成员方法>
4.2 引用<数组>的<构造方法>
*/
//1.引用静态方法: 类名::静态方法 EG: Integer::parseInt
ArrayList<String> num = new ArrayList<>();
Collections.addAll(num,"1","2","3","4","5");
num.stream().map(new Function<String,Integer>() {
@Override
public Integer apply(String s){
return Integer.parseInt(s);
}
}).forEach(s->System.out.println(s));
num.stream().map(Integer::parseInt).forEach(s->System.out.println(s));
//1.复盘:我们首先使用了map并且创建了一个匿名内部类
//但是发现这个过程过于复杂了 并且此时存在函数式接口
//因此我们想到了方法引用来简化流程
//既然我的函数式接口里面的匿名内部类使用了Integer类的parseInt方法
//那我等会直接在.map的范围内,直接方法引用这个类里的方法 简单快捷
//此时我们再巩固一下记忆:new Function泛型一定是前者传入 后者传出 并且不可使用基本数据类型
System.out.println("————————————————————————————————");
//2.引用成员方法 格式: 对象::成员方法
//其他类: 其他类对象:方法名
//本类: this::方法名
//父类:super::方法名
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");
list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s->System.out.println(s)
);
list.stream().filter(new StringOperaton()::StringJudge).forEach(s->System.out.println(s));
//这里我们补充一个细节:我们使用其他类的成员方法的引用的时候
//往往需要先创建这个类的对象 然后再在对对象进行::操作符
list.stream().filter(this::StringJudge).forEach(s->System.out.println(s));//欸?这里怎么报错了 我不是想使用this来调用本类方法吗
//你是不是忘记了一件事! 在静态类中调用方法是不可以用this的 因此我们需要创建一个本类对象再来调用 我们这个类不是叫Main么
list.stream().filter(new Main()::StringJudge).forEach(s->System.out.println(s));
//是不是发现了 这样就可以调用
}
public boolean StringJudge(String s){
return s.startsWith("张")&&s.length()==3;
};//这个方法就是那个this无法直接调用的方法
}
文章来源:https://blog.csdn.net/qq_37511412/article/details/135043246
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!