/**
目标: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);
}
}