总结day1005Lambda

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java8 in action 没有共享的可变数据,将方法和函数即代码传递给其他方法的能力就是我们平常所说的函数式...
    铁牛很铁阅读 1,274评论 1 2
  • 第一章 为什么要关心Java 8 使用Stream库来选择最佳低级执行机制可以避免使用Synchronized(同...
    谢随安阅读 1,518评论 0 4
  • 简介 概念 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主...
    刘涤生阅读 3,235评论 5 18
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 3,771评论 0 7
  • lambda表达式(又被成为“闭包”或“匿名方法”)方法引用和构造方法引用扩展的目标类型和类型推导接口中的默认方法...
    183207efd207阅读 1,499评论 0 5