java8新特性系统学习之Lombda表达式

    技术2024-05-09  64

    因工作需要,系统学习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进行一个系统的总结,未来可期

    Processed: 0.018, SQL: 10