初看Java8新特性-Lambda表达式的语法规则

来源:互联网 发布:蓝牙聊天软件 编辑:程序博客网 时间:2024/05/22 05:28

前言

前面只是很零碎的举了一些有关Lambda表达式的例子,没有做一个系统的语法实例,这里将给出Lambda表达式的语法规则!

语法规则

无参数,无返回值

程序实例:

    //无参数 无返回值    @Test    public void test1(){        Runnable r =()-> System.out.println("无参数 无返回值");        r.run();    }

输出结果:

无参数 无返回值

有单个参数,无返回值

程序实例:

    //有单个参数 无返回值    @Test    public void test2(){        Consumer<String> con=(str)->System.out.println(str);        con.accept("有单个参数 无返回值");    }

输出结果:

有单个参数 无返回值

附加说明:

//这三种写法的效果是一样的Consumer<String> con=str ->System.out.println(str);Consumer<String> con=(str)->System.out.println(str);//推荐使用这种Consumer<String> con=(String str)->System.out.println(str);

有多个参数,Lambda体有多条语句,有返回值

程序实例:

    //多个参数 Lambda体中有多条语句 有返回值    @Test    public void test3(){        Comparator<Integer> com=(x,y)->{            System.out.println("多个参数 Lambda体中有多条语句 有返回值");            return Integer.compare(x, y);        };        System.out.println(com.compare(2,1));    }

输出结果:

多个参数 Lambda体中有多条语句 有返回值1

附加说明:

参数(x,y)里面的类型可以加上变成(Integer x,Integer y),不加上JVM会自动进行类型推断!(建议不用加)

有多个参数,Lambda体有一条语句,有返回值

程序实例:

    //有多个参数,Lambda体有一条语句,有返回值    @Test    public void test4(){        Comparator<Integer> com=(x,y)-> Integer.compare(x, y);        System.out.println(com.compare(2,1));    }

输出结果:

1

附加说明:

如果Lambda体中只有一条返回语句,那么对应的{}return都是可以不用写的!

最后说明

很多人刚开始了解Lambda表达式会有这样的疑问:

如果一个接口有多个参数数目相同的方法,那我们的Lambda表达式又怎样选取呢?

要想解决这个疑问,我们要引入一个概念 函数式接口
什么是函数式接口?
简单来说就是该接口只有一个抽象方法!

而Lambda表达式支持的接口都是函数式接口!所以,就不存在一个接口中有多个抽象方法了!
注:可以使用@FunctionInterface注解来修饰函数式接口,这样当这个接口有超过一个抽象方法的时候程序就会报错了!

原创粉丝点击