欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【Java】—— 函数式编程:Lambda表达式、方法引用

【Java】—— 函数式编程:Lambda表达式、方法引用

2025/6/17 5:08:23 来源:https://blog.csdn.net/Tir_zhang/article/details/143665454  浏览:    关键词:【Java】—— 函数式编程:Lambda表达式、方法引用

目录

一、什么是Lambda表达式?

二、Lambda表达式使用规则

1、参数类型可以全部省略

2、如果只有一个参数,参数类型省略的同时"()"也可以省略

3、如果方法体中只有一行代码,大括号{}可以省略,同时省略";",如果有return,也必须省略

三、方法引用

1、静态方法引用

2、实例方法引用

3、构造器引用


一、什么是Lambda表达式?

JDK 8开始新增的一种语法形式,可以替代匿名内部类对象,让程序更简洁。

注意:只能替代函数式接口(有且仅有一个抽象方法的接口)的匿名内部类!!

二、Lambda表达式使用规则

1、参数类型可以全部省略

A a1 = (m,n) -> {return m+n;};

2、如果只有一个参数,参数类型省略的同时"()"也可以省略

B b1 = c -> {System.out.println("省略()");} ;

3、如果方法体中只有一行代码,大括号{}可以省略,同时省略";",如果有return,也必须省略

        A a2 = (m,n) -> m+n;

三、方法引用

使用已经存在的方法,作为函数式接口中抽象方法的方法体。

//        匿名内部类写法calculateAndPrint(new Computer() {@Overridepublic double pow(double x, double y) {return Math.pow(x, y);}});
//        lambda写法calculateAndPrint((double a,double b) -> {return Math.pow(a,b);});
//        lambda省略写法calculateAndPrint((a,b)->Math.pow(a,b));
//        方法引用写法calculateAndPrint(Math::pow);

方法引用有静态方法引用、实例方法引用、构造方法引用

1、静态方法引用

使用格式:

类名 :: 静态方法

使用场景:

某个Lambda表达式里只是调用一个静态方法,并且“→”前后参数的形式一致

//        匿名内部类写法calculateAndPrint(new Computer() {@Overridepublic double pow(double x, double y) {return Math.pow(x, y);}});
//        lambda省略写法calculateAndPrint((a,b)->Math.pow(a,b));
//        方法引用写法calculateAndPrint(Math::pow);

2、实例方法引用

1)使用格式:

对象名 :: 实例方法

使用场景:

某个Lambda表达式里只是通过对象名称调用一个实例方法,并且“→”前后参数的形式一致

//    使用匿名内部类Arrays.sort(student, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o1.getAge() - o2.getAge();}});
//        使用lambda表达式Arrays.sort(student, (o1, o2) -> o1.getAge() - o2.getAge());
//        使用方法引用Arrays.sort(student, new StudentComputer()::subAge);

2)使用格式:

类名 :: 实例方法

使用场景:

某个Lambda表达式里只是通过对象名称调用一个实例方法,同时参数列表中的第一个参数就是调用实例方法的对象, 并且“→”前后剩余参数的形式一致

//        匿名内部类convertAndPrint(new Convert() {@Overridepublic String convert(String source, String oldStr, String newStr) {return source.replace(oldStr,newStr);}}, "四月天行健", "四", "五");
//        lambda写法convertAndPrint(((source, oldStr, newStr) -> source.replace(oldStr,newStr)),"北京","北","南");
//        方法引用convertAndPrint(String::replace,"JavaEE","JavaEE","Harmony");

3、构造器引用

使用格式:

类名 :: new

使用场景:

某个Lambda表达式里只是在创建对象,并且“→”前后参数情况一致

//        匿名内部类createStringAndPrint(new StringFactory() {@Overridepublic String createString(byte[] bytes) {return new String(bytes);}}, bys);
//        lambdacreateStringAndPrint(bytes -> new String(bytes),bys);
//        方法引用createStringAndPrint(String::new,bys);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词