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

【Java-API】lambda表达式4种方法引用

lambda表达式就是对匿名内部类的简写和优化(要求接口必须是函数式接口@Functional Interface(即接口中有且只有一个抽象方法(注意:与Object公共类相同的不计入抽象方法))但是可以有多个非抽象方法),方法引用就是对lambda表达式的优化和简写。

首先lambda表达式4种方法引用可以归纳为下列4种:

1,静态方法引用

2,实例方法引用

3,构造方法引用

4,特殊方法引用

那么就直接进行举例说明:

第一种:静态方法引用

静态方法/类方法(static修饰的方法)引用
        语法:类名::方法名

注意事项:
        被引用的方法参数列表和函数式接口中抽象方法的参数一致!!
        接口的抽象方法没有返回值,引用的方法可以有返回值也可以
        没有接口的抽象方法有返回值,引用的方法必须有相同类型的返回值!!
        由于满足抽象参数列表与引用参数列表相同,所以可以写成静态方法引用的格式

案例:(将字符串转换成Integer类型)

函数式接口

/*** 通过以下接口实现匿名内部类,lambda表达式,静态方法引用* public interface MyInterface{Integer strToInt(String str);}* 底层适用:Integer.parseint()实现*创建一个接口*抽象方法为Integer strToInt(String str);*/
public interface MyInterface {//抽象方法Integer strToInt(String str); //将字符串转换成Integer类型
}

测试类

/*** 接口测试类 1.通过以下接口实现匿名内部类,* lambda表达式,静态方法引用 public interface MyInterface{*  Integer strToInt(String str); } * 底层适用:Integer.parseint()实现* 静态方法引用语法:类名::方法名注意事项:被引用的方法参数列表和函数式接口中抽象方法的参数一致!!接口的抽象方法没有返回值,引用的方法可以有返回值也可以没有接口的抽象方法有返回值,引用的方法必须有相同类型的返回值!!由于满足抽象参数列表与引用参数列表相同,所以可以写成静态方法引用的格式*/
public class MyInterfaceTest {public static void main(String[] args) {// 利用匿名内部类的方式MyInterface my = new MyInterface() {// 底层适用:Integer.parseint()实现@Overridepublic Integer strToInt(String str) {// 参数为String类型,返回值类型为int类型(会自动进行装箱)return Integer.parseInt(str);  //方法是static修饰的 为静态方法}};// 采用lambda表达式进行优化MyInterface my1 = str -> Integer.parseInt(str);// 采用静态方法引用MyInterface my2 =  Integer::parseInt;// 调用方法 非static修饰 对象名.方法名()System.out.println(my.strToInt("1261542"));System.out.println(my1.strToInt("134343"));System.out.println(my2.strToInt("134343"));}}

第二种:实例方法引用

实例方法(非static修饰的方法)引用
        语法:对象名:∶非静态方法名

注意事项:
被引用的方法参数列表和函数式接口中抽象方法的参数一致!!

接口的抽象方法没有返回值,引用的方法可以有返回值也可以没有

接口的抽象方法有返回值,引用的方法必须有相同类型的返回值! !

案例:给你一个字符串【数字】  判断是否是以.png结尾的

函数式接口

// 给你一个字符串  判断是否是以.png结尾的
public interface MyInterface {//抽象方法Boolean judgeSuffix(String str);// 参数是字符串,返回值是Boolean类型
}

测试类

package cn.meituan.lambdainstancequote11111;/*** 给你一个字符串 判断是否是以.png结尾的* 实例方法(非static修饰的方法)引用语法:对象名:∶非静态方法名注意事项:被引用的方法参数列表和函数式接口中抽象方法的参数一致!!	接口的抽象方法没有返回值,引用的方法可以有返回值也可以没有	接口的抽象方法有返回值,引用的方法必须有相同类型的返回值! !*/
public class MyInterfaceTest {public static void main(String[] args) {String s = "默默无闻的你.png";// 采用匿名内部类方法MyInterface my = new MyInterface() {@Overridepublic Boolean judgeSuffix(String str) {// 参数为字符串类型(输入的是结尾)// 返回值为Boolean类型// 字符串【数字】 判断是否是以.png结尾的return s.endsWith(str);// 调用s.endsWith(没有static修饰)的实例方法}};// 采用lambda表达式进行优化简化代码MyInterface my1 =  str ->  s.endsWith(str);// 采用实例方法引用进行简写MyInterface my2 =  s::endsWith;// 调用方法输出结果System.out.println(my.judgeSuffix(".png"));System.out.println(my1.judgeSuffix(".png"));System.out.println(my2.judgeSuffix(".png"));}
}

第三种:构造方法引用

构造方法引用
        语法:类名::new

注意事项:
        被引用的类必须存在一个构造方法与函数式接口的抽象方法参数列表一致

案例:利用构造方法将String字符串转换成Integer类型

函数式接口

public interface MyInterface {//抽象方法Integer strToInt(String str);
}

测试类

/*** 接口测试类 构造方法引用* 利用构造方法将String字符串转换成Integer类型** 构造方法引用语法:类名::new注意事项:被引用的类必须存在一个构造方法与函数式接口的抽象方法参数列表一致*/
public class MyInterfaceTest {public static void main(String[] args) {// 采用匿名内部类的方式MyInterface my = new MyInterface() {@Overridepublic Integer strToInt(String str) {// Integer integer = new// Integer(str);//创建一个构造方法将String类型转换成Integer类型(自动装箱)return new Integer(str); // 方法是一个构造方法}};// 采用lambda表达式对匿名内部类进行优化MyInterface my1 =  str ->  new Integer(str); // 采用构造方法引用进行简化代码MyInterface my2 =  Integer::new; // 调用方法输出结果System.out.println(my.strToInt("232434"));System.out.println(my1.strToInt("232434"));System.out.println(my2.strToInt("232434"));}
}

第四种:特殊方法引用

特殊方法引用

        语法:类名::实例方法名

注意事项:
        在抽象方法中,参数作为实例方法调用者,就可以简化


需求:判断参数t是否为空字符串

函数式接口

public interface MyInterface {//抽象方法Boolean empty(String str);}

测试类

package cn.meituan.lambdaspecialinstancequote11111;/*** 需求:给你一个字符串, 判断是否为空* 特殊方法引用语法:类名::实例方法名* */
public class MyInterfaceTest {public static void main(String[] args) {// 采用匿名内部类方法MyInterface my = new MyInterface() {@Overridepublic Boolean empty(String str) {// 参数为字符串类型(输入的字符串)// 返回值为Boolean类型// 字符串【数字】 判断是否为空return str.isEmpty();// 特殊实例方法引用}};// 采用lambda表达式进行优化简化代码MyInterface my1 =  str -> str.isEmpty();// 采用实例方法引用进行简写    格式: 类名(数据类型的类)::实例方法名MyInterface my2 =  String::isEmpty;// 调用方法输出结果System.out.println(my.empty("sdsdsd"));// falseSystem.out.println(my1.empty(""));// trueSystem.out.println(my2.empty(""));// true}}

http://www.xdnf.cn/news/11325.html

相关文章:

  • 磁盘分区魔法师Norton PartitionMagic(PQ8.0)使用图解和使用(搜藏)
  • 2023年-华为机试题库B卷(Python)【满分】
  • 谈谈MYSQL中的Explain
  • BootLoader这个玩意
  • Window.Open参数详解
  • 局域网的管理
  • 单板计算机的功能有哪些??
  • 2024年上半年网络工程师上午真题及答案解析
  • 纯真IP地址数据库qqwry.dat解析
  • iOS开发实用技巧—super、superClass、class的区别
  • IT从业人员必看的10个论坛
  • 汉诺塔(又称河内塔)
  • linux下网络发包工具
  • 均匀分布白噪声和高斯白噪声及其matlab产生方式
  • MybatisPlus:泛型方法使用 default <V> List<V> listObjs(Function<? super Object, V> mapper)
  • Win10下Windows Mobile设备中心无法连接斑马PDA 、无法拷贝文件———— Windows 设备中心64位安装包
  • i春秋首届全国数据安全大赛部分复盘
  • 【吐血整理!20个CC0正版素材网站,值得珍藏】自媒体视频创作者必备
  • android wifi 网桥,史上最全无线网桥知识,收藏这一篇就够了!
  • Java实现钉钉自定义机器人接入
  • Three.js(学习)
  • 云计算基础、Iass、Pass、Sass区别
  • 6-php的web环境安装
  • 【一文带你了解bluetooth】
  • 凶残的挖矿脚本,奴役我数千机器!
  • Google Web Designer for mac(专业网站设计工具)
  • 什么是金叉、死叉
  • java soap api操作和发送soap消息
  • numpy中的nonzero()
  • 什么是ip数据库