深入理解Lambda表达式

/**

目标:Lambda表达式的概述。

 什么是Lambda表达式?
     Lambda表达式是JDK1.8开始之后的新技术,是一种代码的新语法。
     是一种特殊写法,
     作用:“核心目的是为了简化匿名内部类的代码写法”。

 Lambda表达式的格式:
    (匿名内部类被重写方法的形参列表) -> {
       被重写方法的方法体代码。
    }

    -> 就是一个新语法,没有实际含义,但是不能省略!

 Lambda表达式的使用前提:
     (1)Lambda表达式并不能简化所有匿名内部类的写法。
     (2)Lambda表达式只能简化接口中只有一个抽象方法的匿名内部类形式。

 Lambda表达式只能简化函数式接口的匿名内部类写法:
     a.首先必须是接口。
     b.接口中只能有一个抽象方法。
 小结:
    Lambda表达式只能简化接口中只有一个抽象方法的匿名内部类写法。
    接口中只有一个抽象方法的接口称为函数式接口。
    Lambda只能简化函数式接口的匿名内部类写法。

/
public class LambdaDemo01 {
public static void main(String[] args) {
// Thread t = new Thread(){
// @Override
// public void run() {
// System.out.println(Thread.currentThread().getName()+":执行~~~");
// }
// };
// Thread t = () -> {
// System.out.println(Thread.currentThread().getName()+":执行~~~");
// };
// t.start();
}
}
/
*

目标:Lambda表达式简化Runnable接口的匿名内部类写法

 @FunctionalInterface函数式接口注解:
    一旦某个接口加上了这个注解,这个接口只能有且仅有一个抽象方法。
    这个接口就可以被Lambda表达式简化。

*/
public class LambdaDemo {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+":执行~~~");
}
});
t.start();

    Thread t1 = new Thread(() -> {
            System.out.println(Thread.currentThread().getName()+":执行~~~");
    });
    t1.start();

    new Thread(() -> {
        System.out.println(Thread.currentThread().getName()+":执行~~~");
    }).start();

    new Thread(() -> System.out.println(Thread.currentThread().getName()+":执行~~~")).start();
}

}

/**

Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)

(1)如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
(2)如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。
    此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
(3)参数类型可以省略不写。
(4)如果只有一个参数,参数类型可以省略,同时()也可以省略。

*/
public class LambdaDemo01 {
public static void main(String[] args) {
List names = new ArrayList<>();
names.add(“胡伟光”);
names.add(“甘挺”);
names.add(“洪磊”);

    names.forEach(new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    });

    names.forEach((String s) -> {
            System.out.println(s);
    });

    names.forEach((s) -> {
        System.out.println(s);
    });

    names.forEach(s -> {
        System.out.println(s);
    });

    names.forEach(s -> System.out.println(s) );

    names.forEach(System.out::println);


}

}

猜你喜欢

转载自blog.csdn.net/weixin_46011971/article/details/106848688