Java lambda表达式用法介绍

本文深入介绍了Java 8的lambda表达式,包括Functional Interface的概念、带参数的Lambda表达式以及Lambda与Stream API的结合使用。通过示例展示了如何简化代码并提高编程效率。
摘要由CSDN通过智能技术生成

在本文中,我们将通过示例了解Javalambda表达式以及lambda表达式在函数接口、通用函数接口和流API中的使用。

lambda表达式是在Java8中首次引入的。它的主要目标是提高语言的表达能力。

但是,在进入lambdas之前,我们首先需要了解功能接口。

什么是Functional Interface?

如果Java接口包含一个且仅包含一个抽象方法,则称为函数接口。只有一种方法指定了接口的预期用途。

例如,包java.lang中的Runnable接口;是一个函数接口,因为它只构成一个方法,即run()

示例1:用java定义函数接口

import java.lang.FunctionalInterface;
@FunctionalInterface
public interface MyInterface{
   
    // the single abstract method
    double getValue();
}

在上面的示例中,接口MyInterface只有一个抽象方法getValue()。因此,它是一个功能接口。

这里,我们使用了注释@functioninterface。注释强制Java编译器指示该接口是功能接口。因此,不允许有多个抽象方法。然而,这不是强制性的。

在Java7中,函数接口被视为单一抽象方法或SAM类型。SAMs通常在Java7中使用匿名类实现。

示例2:用java中的匿名类实现SAM

public class FunctionInterfaceTest {
   
    public static void main(String[] args) {
   

        // anonymous class
        new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                System.out.println("I just implemented the Runnable Functional Interface.");
            }
        }).start();
    }
}

输出:

 just implemented the Runnable Functional Interface.

在这里,我们可以将一个匿名类传递给一个方法。这有助于在Java7中编写代码更少的程序。但是,语法仍然很难,需要很多额外的代码行。

Java8进一步扩展了SAMs的功能。因为我们知道函数接口只有一个方法,所以在将其作为参数传递时,不需要定义该方法的名称。Lambda表达式允许我们完全做到这一点。

##Lambda表达式简介
Lambda表达式本质上是一个匿名或未命名的方法。lambda表达式不会自行执行。相反,它用于实现由函数接口定义的方法。

如何在Java中定义lambda表达式?

下面是如何在Java中定义lambda表达式。

(parameter list) -> lambda body

使用的新运算符(->)称为箭头运算符或lambda运算符。语法目前可能不清楚。让我们来探讨一些例子,

假设我们有这样一种方法:

double getPiValue() {
   
    return 3.1415;
}

我们可以使用lambda表达式编写此方法,如下所示:

() -> 3.1415

这里,该方法没有任何参数。因此,运算符的左侧包含一个空参数。右侧是lambda主体,指定lambda表达式的操作。在本例中,它返回值3.1415。

Lambda体的类型

在Java中,lambda主体有两种类型。

  1. 具有单个表达式的主体
() -> System.out.println("Lambdas are great");

这种类型的lambda体称为表达式体。

  1. 由代码块组成的主体。
() -> {
   
    double pi = 3.1415;
    return pi;
};

这种类型的lambda体称为块体。块体允许lambda体包含多个语句。这些语句包含在大括号内,必须在大括号后添加分号。

注意:对于块体

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java盘鱼宴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值