Java(Lambda表达式)

一、函数式思想

面向对象的思想
    做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情

函数式编程思想
    只要能获取到结果,谁去做这么做的都不重要,重视的是结果,不是过程

二、冗余的Runnable代码

老式步骤

1、创建Runnable接口的实现类,重写run方法,设置线程任务
2、创建Runnbale接口实现类对象
3、创建Thread类对象,构造方法中传递Runnable接口的实现类
4、调用Start()方法,执行run方法

代码简化:使用匿名内部类,实现多线程程序

新式方法

     //使用Lambda表达式,实现多线程
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"线程创建了");
        }
        ).start();

三、匿名内部类

1、好处:
  无参数:不需要任何条件即可执行该方案
  无返回值:该方案不产生任何结果
  代码块:该方案的具体执行步骤

2、坏处:复杂

四、Lambda表达式的标准格式

由三部分组成:
  (参数列表)->{一些重写方法的代码};

    ():接口中抽象方法的参数列表,没有参数,就空着,多个参数用逗号分割
    ->:把参数传递给方法体
    {}:重写接口的抽象方法的方法体

五、Lambda的省略格式

Lambda表达式:可推导,可省略;
可以省略的内容:
  1、(参数列表):括号中的参数列表的数据类型,可以省略
  2、(参数列表):括号中的参数只有一个,类型和()都可以省略
  3、{一些代码}:如果代码只有一行,无论是否有返回值,可以一起省略{}、retrun、分号(必须一起省略)

六、Lambda使用前提

1、必须具有接口,要求接口中有且仅有一个抽象方法
2、必须有上下文推断

七、代码实现

/**
 * 使用数组存储多个Person对象
 * 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
 */
public class Test {
    public static void main(String[] args) {
        Person[] arr = {new Person("张三", 18),
                new Person("李四", 20),
                new Person("王五", 17)};
        //匿名内部类
//        Arrays.sort(arr, new Comparator<Person>() {
//            @Override
//            public int compare(Person p1, Person p2) {
//                return p1.getAge() - p2.getAge();
//            }
//        });

        //使用Lambda表达式,简化匿名内部类
        Arrays.sort(arr,(Person p1,Person p2)->{
            return p1.getAge()-p2.getAge();
        });

        //遍历数组
        for (Person p : arr) {
            System.out.println(p);
        }
    }
}

posted @ 2021-03-15 20:52  一名初学者  阅读(177)  评论(0)    收藏  举报