JAVA8新特性之——Lambda表达式

JAVA8新特性之——Lambda表达式

img
在 Java8 以前,我们想要让一个方法可以与用户进行交互,比如说使用方法内的局部变量;这时候就只能使用接口做为参数,让用户实现这个接口或使用匿名内部类的形式,把局部变量通过接口方法传给用户。

Lambda表达式的本质:作为函数式接口的实例

Lambda表达式的使用:(分为6种常见情况介绍)

1. 第一种使用情况

语法格式一:无参,无返回值

@Test
    public void test1(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };

        r1.run();

        System.out.println("***********************");
       //TODO:Lambda表达式写法
        Runnable r2 = () -> {
            System.out.println("我爱北京故宫");
        };

        r2.run();
    }

2. 第二种使用情况

//语法格式二:Lambda 需要一个参数,但是没有返回值。

 @Test

    public void test2(){
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {

                System.out.println(s);

            }
        };

        con.accept("谎言和誓言的区别是什么?");
        System.out.println("*******");
        
        //TODO:Lambda表达式写法
        Consumer<String> con1 = (String s) -> {

            System.out.println(s);

        };

        con1.accept("一个是听得人当真了,一个是说的人当真了");

 

}

3. 第三种使用情况

语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”

 @Test

    public void test3(){

        Consumer<String> con1 = (String s) -> {

            System.out.println(s);

        };

        con1.accept("一个是听得人当真了,一个是说的人当真了");

        System.out.println("*******");

        //TODO:Lambda表达式写法
        Consumer<String> con2 = (s) -> {

            System.out.println(s);

        };

        con2.accept("一个是听得人当真了,一个是说的人当真了");
}

4. 第四种使用情况

语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略

    @Test

    public void test5(){

        Consumer<String> con1 = (s) -> {

            System.out.println(s);

        };

        con1.accept("一个是听得人当真了,一个是说的人当真了");
        System.out.println("*******");

        Consumer<String> con2 = s -> {

            System.out.println(s);

        };

        con2.accept("一个是听得人当真了,一个是说的人当真了");

}

5. 第五种使用情况

语法格式五:Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值

@Test
public void test6(){
    Comparator<Integer> com1 = new Comparator<Integer>() {

        @Override

        public int compare(Integer o1, Integer o2) {

            System.out.println(o1);

            System.out.println(o2);

            return o1.compareTo(o2);

        }

    };
    System.out.println(com1.compare(12,21));

 

    System.out.println("*********");

    Comparator<Integer> com2 = (o1,o2) -> {

        System.out.println(o1);

        System.out.println(o2);

        return o1.compareTo(o2);

    };

    System.out.println(com2.compare(12,6));

}

6. 第六种情况

//语法格式六:当 Lambda 体只有一条语句时,return 与大括号若有,都可以省略

    @Test

    public void test7(){

 

        Comparator<Integer> com1 = (o1,o2) -> {

            return o1.compareTo(o2);

        };

 

        System.out.println(com1.compare(12,6));

 

        System.out.println("*********");

 

        Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);

 

        System.out.println(com2.compare(12,21));

 

}
@Test

    public void test8(){

        Consumer<String> con1 = s -> {

            System.out.println(s);

        };

        con1.accept("一个是听得人当真了,一个是说的人当真了");

 

        System.out.println("*********");

 

        Consumer<String> con2 = s -> System.out.println(s);

 

        con2.accept("一个是听得人当真了,一个是说的人当真了");

 

    }
发布了3 篇原创文章 · 获赞 0 · 访问量 32

猜你喜欢

转载自blog.csdn.net/qq_26598941/article/details/104802956