2020-07-03 java8新特性系统学习之Lombda表达式
因工作需要,系统学习java8新特新,主要有Lomda表达式,stream API为什么要是用Lomda表达式?Lambda是-一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为- -种更紧凑的代码风格,使Java的语言表达能力得到了提升。注意使用Lomda表达式需要函数式接口
因工作需要,系统学习java8新特新,主要有Lomda表达式,stream API
为什么要是用Lomda表达式?
Lambda是-一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为- -种更紧凑的代码风格,使Java的语言表达能力得到了提升。
注意使用Lomda表达式需要函数式接口的支持
java8引入了一个符号:-> ,箭头符号也叫Lomda符号,->左侧的是函数式接口中抽象方法的参数,参数的数据类型要么都写,要么都不写,可以理解为形参的变量,随便定义;右侧就是你实现这个抽象方法的方法体
为什么参数列表可以不用写数据类型?
因为JVM编译器可以通过上下文推断,这个过程称之为类型推断
Lomda的基础语法,匿名内部类和lomda表达式对比,这是无参数、无返回值的写法
@Test
public void test1(){
//jdk1.7以前必须是final
int num = 0;
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类的方式" + num);
}
};
r.run();
System.out.println("----------------------------");
Runnable r1 = () -> System.out.println("Lomda表达式的方式" + num);
r1.run();
}
jdk1.7以前,在匿名内部类中引用同级的变量,此变量必须要加final,jdk1.8后,默认隐式地加上final的,可以省略不写
有一个参数、无返回值
@Test
public void test2(){
//这句就相当于是对这个借口中的方法进行一个实现
Consumer con = (x) -> System.out.println(x);
//调用借口中的方法
con.accept("传入参数");
}
如果->左侧只有一个参数,那么参数的那个小括号可以不写
有两个以上的参数,并且有返回值,Lomda体中有多条语句,
@Test
public void test3(){
Comparator<Integer> com = (x,y) -> {
System.out.println("函数式接口");
return Integer.compare(x,y);
};
}
如果->左侧有多个参数,括号一定要写,Lomda体有多条语句,那么一定要写{}把扩起来
有两以上的参数,并且有返回值,但Lomda体中只有一条语句
@Test
public void test4(){
Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
}
像这种有或者没有返回值,只要Lombda体只有一条语句,我们都可以把Lomda体的{}和return都可以省略不写,
下面进行一个练习,需求:对一个数进行运算
首先我们应该自定义一个函数式接口
public interface MyInterface {
Integer getValue(Integer num);
}
然后使用Lombda表达式进行单元测试
@Test
public void test5(){
//我们传入一个数,获得这个数的平方
MyInterface mi = num -> num * num;
//调用接口中的方法
System.out.println(mi.getValue(10));
}
得到结果100
上面就是我对Lombda表达式的简单理解,下篇对Stream API进行一个系统的总结,未来可期
更多推荐
所有评论(0)