前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Lambda表达式

Java Lambda表达式

作者头像
一只胡说八道的猴子
发布2020-09-27 10:03:47
5160
发布2020-09-27 10:03:47
举报

Java Lambda表达式

在这里插入图片描述
在这里插入图片描述

在了解Lambda表达式之前我们先来区分一下面向对象的思想和函数式编程思想的区别 面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用他的方法来解决 函数时编程思想: 只要能获取到结果,谁去做的都不重要,重视的是结果,不重视过程 使用Lambda表达式的目的是为了简化我们的代码 匿名内部类虽然也简化了我们的代码,但是Lambda比他更简单,而且语法也更加少

下面我用一段代码来演示一下二者的区别

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
    //匿名内部类的写法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("这是匿名内部类");
            }
        }).start();
        //Lambda表达式
        new Thread(()-> System.out.println("这是Lambda表达式")).start();
    }
}

结果

在这里插入图片描述
在这里插入图片描述

我们可以看到Lambda大大的减少了代码量,因为Lambda关心的是结果并不是过程,省略的东西他都可以自行推导出来

Lambda的标准格式

Lambda省去面向对象的条条框框,格式有三个部分组成 一些参数 一个箭头 一段代码 (参数类型 参数名称)——>{代码语句} 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。 -> 是新引入的语法格式,代表指向动作。 大括号内的语法与传统方法体要求基本一致。

下面用两个案例来演示Lam打表达式

Calculator接口

代码语言:javascript
复制
package Lambda;

public interface Calculator {
    int sum(int a,int b);
}
代码语言:javascript
复制
package Lambda;

import Rubable.RunableImp;

import java.sql.SQLOutput;

public class Main {
    public static void main(String[] args) {
       sum(10,20,((a, b) -> a+b));
    }
    public  static  void sum(int a,int b,Calculator calculator){
        int sum=calculator.sum(a,b);
        System.out.println("和为:"+sum);
    }

}

结果

在这里插入图片描述
在这里插入图片描述

Comparator接口

当一个对象数组需要进行排序的时候Array.sort需要一个Comparator接口来指定排序的规则

代码语言:javascript
复制
package Lambda;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
    Student[] studentArray={new Student("张三",18),
            new Student("李四",8),
    new Student("王五",55)};
        Arrays.sort(studentArray,(one,two)->one.getAge()-two.getAge());
        for (Student student : studentArray) {
            System.out.println(student);
        }
    }
代码语言:javascript
复制
package Lambda;

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

结果 排序成功

在这里插入图片描述
在这里插入图片描述

Lambda的省略规则

  1. 小括号内参数的类型可以省略;
  2. 如果小括号内有且仅有一个参,则小括号可以省略;
  3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

Lambda'的使用前提

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

有且只有一个抽象方法的接口,称为函数式接口

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java Lambda表达式
  • Lambda的标准格式
  • Calculator接口
  • Comparator接口
  • Lambda的省略规则
  • Lambda'的使用前提
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档