从初学者到专家:Java的Lambda表达式完整指南

一.Lambda的概念

概念:Lambda表达式是Java 8引入的一项重要功能,它允许我们以更简洁和灵活的方式编写代码。可以把Lambda表达式看作是一种更方便的匿名函数,可以像数据一样传递和使用。

使用Lambda表达式可以让我们写出更短、更易读的代码。它可以替代传统的匿名类,使代码更加简洁。Lambda表达式还支持函数式编程,这意味着我们可以将函数作为参数传递给其他方法,使得代码更加灵活和可扩展。

1.1 Lambda表达式的语法

基本语法: (parameters) -> expression (parameters) ->{ statements; }
Lambda表达式由三部分组成:
  1. paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
  2. ->:可理解为被用于的意思
  3. 方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。

根据上面的语法,理解下面的代码:

  1. 对于只有单个表达式的Lambda表达式: 
import java.util.Arrays;
import java.util.List;
public class LambdaExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // Lambda表达式作为参数传递给forEach方法
        numbers.forEach(number -> System.out.print(number+" "));
    }
}

运行截图如下:

这个示例首先创建了一个整数列表 numbers。然后,通过调用 forEach 方法并传递一个 Lambda 表达式作为参数,对列表中的每个元素执行操作。

2.对于包含多个语句的Lambda表达式:

import java.util.Arrays;
import java.util.List;
public class LambdaExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // Lambda表达式使用多个语句块
        numbers.forEach(number -> {
            int doubled = number * 2;
            System.out.println(number + " doubled: " + doubled);
        });
    }
}

运行截图:

Lambda 表达式使用了一个语句块,首先计算每个数字的两倍值,并打印原始数字和计算结果。


1.2 函数式接口

要了解 Lambda 表达式 , 首先需要了解什么是函数式接口,函数式接口定义:一个接口有且只有一个抽象方法 。
注意:
  1. 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
  2.  如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

举个简单的例子:假设我是一位厨师,需要有一位助手来帮我。你给助手提供了一个简单的任务:切洋葱。你告诉助手只需要进行切洋葱的操作,其他的工作你会负责。 

在这个例子中,我们可以将这个任务看作是一个接口,而助手则是接口的实现者。这个接口定义了一个方法,即切洋葱的操作。

代码案例:



// 定义一个函数式接口
@FunctionalInterface
interface Task {
//注意只能有一个方法
    void perform();
}

public class LambdaExample {
    public static void main(String[] args) {
        // 创建一个助手对象,使用Lambda表达式实现任务
        Task assistant = () -> System.out.pri
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值