JDK1.8新特性-Lambda表达式(程序员必备教程)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JDK1.8新特性-Lambda表达式(程序员必备教程),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4193字,纯文字阅读大概需要6分钟。
内容图文
![JDK1.8新特性-Lambda表达式(程序员必备教程)](/upload/InfoBanner/zyjiaocheng/616/c4ae09d91e0848bb8337105ffa44fda4.jpg)
内部类:lambda表达式
1、内部类
2、lambda表达式
1.2.1、lambda表达式是什么?
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,
尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
1.2.2、接口实现的不同方式?
我们先定义两个测试接口
package interfacer;
interface A {
public abstract int test(int num1,int num2);
}
interface B {
public void test(int a);
}
传统的实现接口的方式:
package interfacer;
public class Test implements A{
@Override
public int test(int num1, int num2) {
return 0;
}
}
用lambda表达式实现接口的方式
()-> { //代码块; }
优点:大幅降低代码量,简单易懂,同时实现一个接口,可以使用实现类,匿名内部类,lambda表达式,复杂程度也越来越低
1.2.3、lambda表达式对接口的要求
并不是所有的接口都用lambda表达式实现的
lambda表达式本质就是一个匿名函数,使用lambda表达式的接口中,必须有且仅有一个方法的实现类必须实现的
即是函数式接口(即只有一个方法实现的接口)
函数式接口:如果一个接口中,有且只有一个方法,是实现类不许要重写实现的,这种接口叫函数式接口
1.2.4、lambda表达式的基本语法
在lambda表达式中,没有方法的名字,在写lambda表达式的时候,只需要关心参数和方法体两个部分(核心部分)
接口:
package interfacer;
interface A {
public abstract int test(int num1,int num2);
}
interface B {
public void test();
}
实现类:
package interfacer;
import interfacer.A;
public class Impl {
public static void main(String[] args) {
//无参,无返回
B lambda2 = ()->{
System.out.println("this is my first lambda method!!!");
};
lambda2.test();
//有参,有返回
A lambda1 = (int a,int b) -> { return a + b; };
System.out.println(lambda1.test(1,2));
}
}
1.2.5、lambda表达式的语法进阶
所谓的语法进阶,更多的是语法的精简
参数精简:
1、lambda表达式的参数,可以省略类型,只写参数名即可
2、如果参数列表中,参数的数量有且仅有一个,则小括号可以省略。
package interfacer;
import interfacer.A;
public class Impl {
public static void main(String[] args) {
B lambda2 = a -> { //或者(a)
System.out.println("this is my first lambda method!!!");
};
lambda2.test(1);
A lambda1 = (a,b) -> { return a + b; };
System.out.println(lambda1.test(1,2));
}
}
方法体:
//1、如果方法体中只有一句代码,则此时大括号可以省略
B lambda2 = a -> //或者(a)
{System.out.println("this is my first lambda method!!!");};
lambda2.test();
----->
B lambda2 = a -> //或者(a)
System.out.println("this is my first lambda method!!!");
lambda2.test
//2、如果方法体中唯一的一句话是返回语句,大括号在省略的同时,return也必须省略
A lambda1 = (a,b) ->{ return a + b; }; --可变为--> A lambda1 = (a,b) -> a + b;
1.2.6、lambda表达式的函数引用
//将一个接口的实现,引用到一个已经存在的方法上。此时,使用这个已经存在的方法,实现接口中的抽象方法。
package interfacer;
import interfacer.A;
public class Impl {
//注意事项:一定要注意引用的方法,参数和返回值类型,必须和接口中定义的一致
public static void main(String[] args) {
/*
A lambda1 = (a,b) ->
{ return Impl.Mather(10,2); };
System.out.println(lambda1.test(10,2));
*/
A lambda1 = Impl::Mather; //
System.out.println(lambda1.test(10,2));
}
public static int Mather(int a,int b){
if (a >= b){
return a-b;
}
return b-a;
}
}
(1)方法的引用:
可以引用任何的已经存在的方法,在引用的时候只需要注意方法是静态的还是非静态即可,静态方法,需要使用类引用,非静态方法需要使用对象来引用。
package interfacer;
import interfacer.A;
public class Impl {
public static void main(String[] args) {
A lambda1 = Impl::Mather;
System.out.println(lambda1.test(10,2));
B lambda2 = new Impl()::show;
lambda2.test(1);
}
public static int Mather(int a,int b){
if (a >= b){
return a-b;
}
return b-a;
}
public void show(int i) {
System.out.println(i*i);
}
(2)getter,setter的引用
package interfacer;
public class Program {
public static void main(String[] args) {
Dog dog = new Dog("yimi","中华田园犬");
GetName lambda = x -> x.getName();
GetName lambda1 = Dog::getType;
System.out.println(lambda.get(dog)+","+lambda1.get(dog));
}
}
interface GetName{
String get(Dog dog);
}
class Dog{
private String name;
private String type;
public Dog() {
}
public Dog(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
内容总结
以上是互联网集市为您收集整理的JDK1.8新特性-Lambda表达式(程序员必备教程)全部内容,希望文章能够帮你解决JDK1.8新特性-Lambda表达式(程序员必备教程)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。