【JAVA学习之路 | 进阶篇】Lambda表达式

简介: 【JAVA学习之路 | 进阶篇】Lambda表达式

1.java8新特性 : 函数式接口

什么是函数式接口?

  • 只包含一个抽象方法的接口称为函数式接口.该接口可以包含其他非抽象方法.
  • 可以通过lambda表达式创建该接口的实现类的对象.(lambda表达式抛出受检异常,那么该异常需要在目标接口的抽象方法上进行声明)
  • 我们可以在抽象方法上使用注解,这样做可以检查是否是函数式接口.
  • 在java.util.function包下,定义了java8丰富的函数式接口.

2.冗余的匿名内部类与简洁的lambda表达式

例 :

public class LambdaTest {
    public static void main(String[] args) {
        //实现线程当中提及的Runnable接口,重写了当中的一个抽象方法, 并创建了匿名实现类的对象
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("hexua你太酷啦");
            }
        };
        r1.run();
 
        //如果我们使用lambda表达式,将会非常简洁
        Runnable r2 = () -> {
            System.out.println("hexua你太酷啦");
        };
        r2.run();
        //运行会发现,两种写法运行结果相同
        //hexua你太酷啦
        //hexua你太酷啦
    }
}

接着我们来介绍一下lambda表达式的语法.

3.lambda表达式的语法

lambda表达式 : 在java8中引入了一种新的语法元素和操作符.即"->".该操作符被称为箭头操作符.它将lambda表达式分为两个部分 :


(1)左侧:指定了lambda表达式需要的参数列表.


  (2)  右侧: 指定了lambda体,是抽象方法的实现逻辑.也即lambda表达式要执行的功能.


接下来介绍六种语法格式.

4.语法格式

(1). 无参数, 无返回值类型

@Test
    public void test1() {
        //无参数, 无返回值类型
        Runnable r1 = () -> {
            System.out.println("语法格式-1");
        };
        r1.run();
        //输出和 : 语法格式-1
    }

(2). 需要一个参数, 但是没有返回值

@Test
    public void test2() {
        //需要一个参数, 但没有返回值
        LambdaInterface<String> l1 = (String s) -> {
            System.out.println(s + "tkl");
        };
        l1.show("hexua");
        //输出 : hexuatkl
    }
}
interface LambdaInterface<T> {
    void show(T s);
}

(3). 数据类型可以省略, 因为可以由编译器推断得出, 称为类型推断

@Test
    public void test3() {
        //类型推断, String类型可以省略
        LambdaInterface<String> l1 = (s) -> {
            System.out.println(s + "tkl");
        };
        l1.show("hexua");
        //输出 : hexuatkl
    }
}
interface LambdaInterface<T> {
    void show(T s);
}

(4). 参数列表只有一个参数的情况下, 小括号可以省略

@Test
    public void test4() {
        //参数列表只有一个参数的情况下, 圆括号也可以不写
        LambdaInterface<String> l1 = s -> {
            System.out.println(s + "tkl");
        };
        l1.show("hexua");
        //输出 : hexuatkl
    }
}
interface LambdaInterface<T> {
    void show(T s);
}

(5). 需要两个或两个以上的参数时,多条执行语句, 并且可以有返回值

@Test
    public void test5() {
        LambdaInterface<String> l1 = (s, t) -> {
            System.out.println("我也不知道这里写什么");
            return s + "你过来啊" + t;
        };
        System.out.println(l1.show("hexua", "hexi"));
        //输出 : 我也不知道这里写什么
        //hexua你过来啊hexi
    }
}
interface LambdaInterface<T> {
    String show(T s, String t);
}

(6). 若只有一条语句, return和大括号都可以省略

@Test
    public void test6() {
        //只有一条语句时, return与大括号若有, 都可以省略
        LambdaInterface l2 = () -> "return与大括号都可以省略";//返回值语句
        System.out.println(l2.show());
        //输出 : return与大括号都可以省略
    }
}
interface LambdaInterface<T> {
    String show();
}

5.(重点)四种常见的函数式接口

(1). 消费型接口 : 对类型为T的对象应用操作, 包含方法void accept(T t).

Consumer<T>
抽象方法 : void accept(T t)

(2). 供给型接口 : 返回类型为T的对象, 包含方法T get().

Supplier<T>
抽象方法 : T get()

(3). 函数型接口 : 对类型为T的对象应用操作, 并返回类型为R的对象. 包含方法R apply(T t)

Function<T, R>
抽象方法 : R apply(T t)

(4). 判断型接口 : 确定类型为T的对象是否满意某约束, 并返回boolean值, 包含方法boolean test(T t)

Predicate<T>
抽象方法 : boolean test(T t)
相关文章
|
17天前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
20天前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
20天前
|
JSON 自然语言处理 Java
这款轻量级 Java 表达式引擎,真不错!
AviatorScript 是一个高性能、轻量级的脚本语言,基于 JVM(包括 Android 平台)。它支持数字、字符串、正则表达式、布尔值等基本类型,以及所有 Java 运算符。主要特性包括函数式编程、大整数和高精度运算、完整的脚本语法、丰富的内置函数和自定义函数支持。适用于规则判断、公式计算、动态脚本控制等场景。
|
22天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
24天前
|
Java API 开发者
Java中的Lambda表达式与函数式编程####
在Java的演变过程中,Lambda表达式和函数式编程的引入无疑是一次重大的飞跃。本文将深入探讨Lambda表达式的定义、用法及优势,并结合实例说明如何在Java中利用Lambda表达式进行函数式编程。通过对比传统编程方式,揭示Lambda表达式如何简化代码、提高开发效率和可维护性。 ####
|
2月前
|
自然语言处理 安全 Java
Aviator Java 表达式引擎
AviatorScript 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言。
49 10
|
4天前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
17 0
|
1月前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。