" 该操作符称为箭头操作符或 Lambda...">
美文网首页程序员
Lambda表达式学习(二)Lambda基础语法

Lambda表达式学习(二)Lambda基础语法

作者: Mason啊 | 来源:发表于2017-12-19 14:05 被阅读54次

    Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分:
    左侧:Lambda 表达式的参数列表;
    右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体;
    对应的每种语法,这里都会给出一个栗子,方便大家的理解。

    语法格式一:无参数,无返回值
    () -> System.out.println("Hello Lambda!");

    @Test
    public void test1(){
        int num = 0;//jdk 1.7 前,必须是 final
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World!" + num);
            }
        };
        r.run();
        System.out.println("-------------------------------");
        Runnable r1 = () -> System.out.println("Hello Lambda!");
        r1.run();
    }
    

    语法格式二:有一个参数,并且无返回值
    (x) -> System.out.println(x)

    @Test
    public void test2(){
        Consumer<String> con = (x) -> System.out.println(x);
        con.accept("有一个参数,并且无返回值");
    }
    

    语法格式三:若只有一个参数,小括号可以省略不写
    x -> System.out.println(x)

    @Test
    public void test3(){
        Consumer<String> con = x -> System.out.println(x);
        con.accept("若只有一个参数,小括号可以省略不写");
    }
    

    语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
    Comparator<Integer> com = (x, y) -> {
    System.out.println("函数式接口");
    return Integer.compare(x, y);
    };

    @Test
    public void test4(){
        Comparator<Integer> com = (x, y) -> {
            System.out.println("函数式接口");
            return Integer.compare(x, y);
        };
    }
    

    语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
    Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

    @Test
    public void test5(){
        Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
    }
    

    语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
    (Integer x, Integer y) -> Integer.compare(x, y);

    (Integer x, Integer y) -> Integer.compare(x, y);
    (x,y) -> Integer.compare(x,y)
    

    ok,讲到这里语法就差不多了在这里了,如果掌握了这些我想应该能解决平时正常的需求,这里有一副对联:

    上联:左右遇一括号省
    下联:左侧推断类型省
    横批:能省则省

    这里讲一个大家需要注意的地方:
    Lambda 表达式需要“函数式接口”的支持
    函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解@FunctionalInterface 修饰,可以检查是否是函数式接口。函数式接口我将在下一篇文章进行讲述,这也是一个蛮重要的知识点。
    Lambda表达式学习(三)Lambda 表达式需要“函数式接口”的支持

    相关文章

      网友评论

        本文标题:Lambda表达式学习(二)Lambda基础语法

        本文链接:https://www.haomeiwen.com/subject/fmibwxtx.html