1.Lambda语法来代替匿名内部类的简单运用
// 匿名的内部类
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("Runningwith out Lambda");
}
};
new Thread(runnable1).start();
// Lambda语法来代替匿名的内部类
Runnable runnable2 = () -> {
System.out.println("Runningfrom Lambda");
};
new Thread(runnable2).start();
// Lambda语法来代替匿名的内部类
new Thread(
() -> System.out.println("In Java8, Lambda expression rocks !!")
).start();
2.Lambda语法的深入学习
注意:Lambda语法操作的接口只能存在一个抽象的函数
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
public class A {
public static void main(String[] args) {
// 无参数 无返回值
Runnable runnable1 = () -> {
System.out.println("Runningfrom Lambda");
};
// 无参数 有返回值
Callable<String> callable1 = () -> {
return "";
};
// 有参数 参数类型 明确
ActionListener actionListener1 = (ActionEvent e) -> {
System.out.println("actionListener1");
};
// 有参数 参数类型 不明确,Java编译器可以根据Lambda出现的上下文来推断出Lamdba表达式参数的类型
ActionListener actionListener2 = (e) -> {
System.out.println("actionListener2");
};
// 带返回值 且有多个参数 并且是 泛型的
Comparator<Integer> comparator1 = (a, b) -> {
return -1;
};
}
}
interface Runnable {
void run();
}
interface Callable<V> {
V call() throws Exception;
}
interface ActionListener {
void actionPerformed(ActionEvent e);
}
// 如果要使用 Lambda表达式 接口中只能有一个 抽象方法
interface Comparator<T> {
abstract int compare(T o1, T o2);
// 来至Object类的非抽象方法 所有类都有的隐式方法,无关于接口
// boolean equals(Object obj);
}