IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 11-1java8新特性-Lambda表达式 -> 正文阅读

[Java知识库]11-1java8新特性-Lambda表达式

java8新特性

  • 速度更快
  • 代码更少(增加了新的语法 Lambda 表达式)?
  • 强大的 Stream API
  • 便于并行
  • 最大化减少空指针异常 Optional
  • Nashorn引擎,允许在JVM上运行JS应用

其中最为核心的为Lambda表达式与Stream API

1Lambda简介

Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

函数式编程思想概述

在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作”

面向对象思想强调“必须通过对象的形式来做事情”

函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”

Lambda表达式就是函数式思想的体现

1.1从匿名类到Lambda的转换

    public static void main(String[] args) {
        //匿名内部类
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类线程");
            }
        };
        //Lambda表达式
        Runnable r2 = ()->{
            System.out.println("Lambda表达式类线程");
        };
    }

1.2Lambda表达式的标准格式

  • 格式:

    (形式参数) -> {代码块}

    • 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可

    • ->:由英文中画线和大于符号组成,固定写法。代表指向动作

    • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容

  • 组成Lambda表达式的三要素:

    • 形式参数,箭头,代码块

左侧:lambda形参列表 (其实是接口中的抽象方法的形参列表)
右侧:Lambda 体,即 Lambda 表达式要执行的功能(重写的抽象方法的方法体)。

使用前提:

  • 使用Lambda必须要有接口
  • 并且要求接口中有且仅有一个抽象方法
  • 以前用匿名实现类表示的现在都可以用Lambda表达式来写。

2Lambda表达式案例

2.1格式1:无参、无返回值

无参,无返回值, Lambda 体只需一条语句
public interface Peolpe {
    void eat();
}
public class PeopleTest {
    //在餐馆吃饭
    public static void restaurantEat(Peolpe peolpe){
        peolpe.eat();
    }
    //无参、无返回值 Lambda体只需要一条语句
    public static void main(String[] args) {
        //普通形式
        Peolpe man = new Man();
        restaurantEat(man);
        //匿名内部类
        restaurantEat(new Peolpe() {
            @Override
            public void eat() {
                System.out.println("女人吃饭");
            }
        });
        //Lambda
        restaurantEat(()->{
            System.out.println("小孩吃饭");
        });
    }
}
class Man implements Peolpe{

    @Override
    public void eat() {
        System.out.println("男人吃饭");
    }
}

2.2格式2:有参、无返回值

public interface MathNumbers {
    void sumByNums(int x, int y);//两个数之和
}
public class MathNumbersTest {
    public static void main(String[] args) {
        queryResults(new MathNumbers() {
            @Override
            public void sumByNums(int x, int y) {
                System.out.println("匿名内部类结果以算出");
            }
        });

//        queryResults((int x, int y)->{
        queryResults((x,y)->{//数据类型可以省略 因为可由编译器推断得出,称为“类型推断”
        //ArrayList<String> list = new ArrayList<>();//类型推断
        //int[] arr = {1,2,3};//类型推断
            System.out.println("匿名内部类结果以算出");
        });
    }
    public static void queryResults(MathNumbers mathNumbers){//该方法逻辑不对,只是为了展示lambda语法
        System.out.println(1+3);
    }
}

2.3格式3:有参、有返回值

public interface MathNumbers {
    int sumByNums(int x, int y);//两个数之和
}
public class MathNumbersTest {
    public static void main(String[] args) {
        queryResults(new MathNumbers() {
            @Override
            public int sumByNums(int x, int y) {
                return x+y;
            }
        });

//        queryResults((int x, int y)->{
        queryResults((x,y)->{//数据类型可以省略
            return x+y;
        });
    }
    public static void queryResults(MathNumbers mathNumbers){//
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:22:29  更:2022-03-04 15:23:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:43:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码