Lambda表达式,示例,快速认识


前言

使用工具:IDEA2020版
提示:以下是本篇文章正文内容,下面案例可供参考

一、Lambda表达式是什么?

1.JAVA面向对象的思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。
2.函数式编程思想:
只要能获得到结果,谁去做的,怎么做的都不重要,重试的是结果,不重视过程。

Lambda表达式就是函数式编程思想,其作用是为了减省了很多程序编程的繁琐过程,而直接达到效果。

二、示例

1.无参数无返回值

其格式:

某方法(()->{
        实际运行的语句;
        };

代码如下(示例):

public class RunnableLambda {
    public static void main(String[] args) {
        // 方法1-1
        new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "创建了一个新的线程");
            }
        }).start();
        // 方法1-2:Lambda表达式
        new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "创建了一个新的线程");
            }
        ).start();
    }
}

效果图:在这里插入图片描述
解释说明:方法1才是正常我们开启线程的方式。实际运行输出的只需要一条 System.out.println(Thread.currentThread().getName() + "创建了一个新的线程"),那么为了减省程序,我们采用了方法2的方式一样也可以输出。重写run()方法时,是没有参数的。在格式里的小括号是填写参数然没有参数,我们就不写参数。->是指向执行语句的意思。
.start()是开启线程的方法。

2.有参数的有返回值的

其格式:

某方法((参数1,参数2)->{
        实际运行的语句;
        (或返回值语句);
        };

其目的的给人物的年龄进行排序。
首先需要一个Person类来定义其属性值:

代码如下(示例):

public class Person {
    private  String name;
    private  int age;

    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

下面进行对主main的编写:

public class PersonArrays {
    public static void main(String[] args) {
        Person[] arr = {
                new Person("姚明", 43),
                new Person("李易峰", 33),
                new Person("小凯", 22),
        };
        // 方法2-1:
        Arrays.sort(arr, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        // 方法2-2:加入Lambda表达式
       Arrays.sort(arr,(Person o1,Person o2)->{
           return o1.getAge()-o2.getAge();
               });

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

        }
    }
}

效果图:在这里插入图片描述
解释说明:
我们对比前面方法1-1和这次的方法2-1,看出这回重写的方法是有参数了,那么我们方法2-2的小括号就加上参数,其余原本方法里有的参数前提我们原封不动就好了。
简单的说就是模仿方法1里,将不需要的程序省略了。

Lambda可省略部分(Lambda的优化)

Lambda表达式:是可推导,可省略的
凡是根据上下文推导出来的内容,都可以省略书写
可以省略的内容:
1.(参数列表):括号中参数列表的数据类型,可以省略不写
2.(参数列表):括号中参数如果只有一个,那么类型和()都可以省略
3.(一些代码):如果{}中的代码只有一行,无论是否有返回值,都可以省略({},return,分号)
注意:要省略{},return,分号必须一起省略。

其注意事项

1.使用Lambda表达必须具有接口,切要求接口中有且只有一个抽象方法。
无论是jdk内置的runnable,comparator接口还是自定义的接口,只有当接口的抽象方法存在且唯一是,才可以使用lambda表达式。
2.使Lambda必须具有上下文推断。
也是方法的参数或局部变量类型必须为Lambda对应接口类型,才能使用Lambda作为该接口的实例。
有且仅有一个抽象方法的接口,称为函数式接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值