Lambda表达式简单来说就是一个方法
他可以作为参数在方法间传递
但只能在使用了@FunctionalInterface的 地方
@FunctionalInterface是单个方法的接口,且使用了@FunctionalInterface的注解
Lambda的好处是语法简洁,同时在多核CPU下效率高
Lambda表达式的语法
有三部分组成:参数列表,箭头(->),以及一个表达式或语句块;
(type parameter) -> function_body
简单例子 对List的遍历
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
//for循环遍历
for (String p : list) {
System.out.println(p);
}
//使用lambda
list.forEach((p) -> System.out.println(p));
lambda表达式可以将我们的代码缩减到一行。
//使用lambda实现排序
Arrays.sort(list, (String s1, String s2) -> (s1.compareTo(s2)));
在实现Runnable接口时也可以这样使用
//匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("I am thread");
}
}).start();
//使用lambda
for (int i = 0; i < 10; i++) {
new Thread(() -> System.out.println("i am thread" + Thread.currentThread().getName())).start();
}
lambda谓词(Predicate)
public static void fillterPrint(List<Person> persons, Predicate<Person> predicate) {
for (Person p : persons) {
if (predicate.test(p))
System.out.println(p.name);
}
}
List<Person> list = new ArrayList<>();
list.add(new Person("张三", "语文", 88));
list.add(new Person("李四", "数学", 99));
list.add(new Person("王五", "计算机", 98));
list.add(new Person("赵六", "化学", 66));
list.add(new Person("小白", "英语", 78));
list.add(new Person("小黑", "物理", 89));
//调用
fillterPrint(list, (Person p) -> p.score < 70);