前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >六百字搞懂lambda

六百字搞懂lambda

原创
作者头像
Java旅途
修改于 2020-06-28 02:23:22
修改于 2020-06-28 02:23:22
3030
举报
文章被收录于专栏:Java旅途Java旅途

什么是函数式编程

在学习lambda之前,我们先搞清楚什么是函数。我理解的函数就是输入一些东西经过一定的规则后输出。假如我们超时买苹果,苹果的单价是5元,则f(x) = 5x;其中x代表我们购买苹果的重量,则苹果的重量和价格对应的一种关系就是函数。我们看看这个函数,我们关注的重点其实就是x和5x。这样我们就好理解了,函数关注的重点就是入参和对应的函数规则,其他的东西都不重要。下面我们结合一段java代码来分析:

  • 函数式接口
代码语言:txt
AI代码解释
复制
@FunctionalInterface
public interface Apple {
    int buyApple(int x);
}
  • 方法实现
代码语言:txt
AI代码解释
复制
public class AppleImpl implements Apple {
    @Override
    public int buyApple(int x) {

        return 5*x;
    }
    public static void main(String[] args) {
        Apple apple = new AppleImpl();
        int price = apple.buyApple(6);
    }
}

我们根据前面定义的函数结合Lambda来重写这个实现 ——关注入参和函数规则,即我们关注的代码只有:

代码语言:txt
AI代码解释
复制
(int x){
    return 5*x;
}

然后我们加上lambda运算符就可以得到如下代码了

代码语言:txt
AI代码解释
复制
Apple apple = (int x) ->{
    return  5*x;
};

函数式接口

我们的lambda表达式基于函数式接口,lambda规定接口中只能有一个需要被实现的方法。即可以有多个方法,但是只有一个方法需要被实现。java8接口中被default修饰的方法会有默认实现。

@FunctionalInterface注解用来修饰函数式接口,接口要求只能由一个未被实现的方法。

lambda表达式简化

lambda的语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。

  1. 简化参数类型,可以不写参数类型,但是必须所有参数的参数类型都不写。
代码语言:txt
AI代码解释
复制
Apple apple = (x) ->{
    return  5*x;
};
  1. 简化参数小括号,如果只有一个参数则可以省略小括号。
代码语言:txt
AI代码解释
复制
Apple apple = x ->{
    return  5*x;
};
  1. 简化方法体大括号,如果方法只有一条语句,则可以省略大括号,如果有返回值,不能写return。
代码语言:txt
AI代码解释
复制
Apple apple = x -> 5*x

我们就不需要使用传统这样优化完成之后,我们整体的代码就成了这样。

代码语言:txt
AI代码解释
复制
@FunctionalInterface
public interface Apple {

    int buyApple(int x);
}
代码语言:txt
AI代码解释
复制
 public static void main(String[] args) {
     Apple apple = x -> 5*x;
 }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
六百字搞懂lambda表达式
在学习lambda之前,我们先搞清楚什么是函数。我理解的函数就是输入一些东西经过一定的规则后输出。假如我们超时买苹果,苹果的单价是5元,则f(x) = 5x;其中x代表我们购买苹果的重量,则苹果的重量和价格对应的一种关系就是函数。我们看看这个函数,我们关注的重点其实就是x和5x。这样我们就好理解了,函数关注的重点就是入参和对应的函数规则,其他的东西都不重要。下面我们结合一段java代码来分析:
Java旅途
2020/07/16
2700
《JAVA EE》内部类(下篇)&Lambda表达式的注意事项
定义在方法中(方法的形参或者实参),没有任何权限修饰符,甚至连类名称都没有的内部类称为匿名内部类。
VIBE
2022/12/02
3140
Java8之熟透Lambda表达式
​ Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。
用户1195962
2019/09/29
5830
Java8之熟透Lambda表达式
Java8新特性--Lambda表达式
Lambda 是一个匿名函数,我们可以把Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码风格,使 Java的语言表达能力得到了提升。
别团等shy哥发育
2023/02/25
3960
Lambda表达式 & Stream 流 & Java8 新特性
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
收心
2022/01/17
2970
怎么理解Java中的lambda表达式
首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:
闻说社
2025/03/10
1150
怎么理解Java中的lambda表达式
Lambda 表达式Demoo
Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码风格,使 Java的语言表达能力得到了提升。
CBeann
2023/12/25
1300
Lambda 表达式Demoo
【Java】23 函数式编程
  当需要启动一个线程去完成任务时,通常会通过java.lang.Runnable接口来定义任务内容,并使用java.lang.Thread类来启动该线程。“一切皆对象”作为指导思想,这种做法没毛病:首先创建一个Runnable接口的匿名内部类对象来指定任务内容,再将其交给一个线程来启动。
Demo_Null
2020/09/28
5620
【Java】23 函数式编程
【数据结构】Lambda表达式的应用
lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块),Lambda 表达式(Lambda expression),基于数学中的λ演算得名,也可称为闭包(Closure) 。
用户11288949
2024/09/24
910
【数据结构】Lambda表达式的应用
java基础学习_JDK新特性_day28总结
java基础学习_JDK新特性_day28总结 ============================================================================= ============================================================================= 涉及到的知识点有: 0:JDK5 & JDK7 新特性 1:Java 8 新特性 2:Java 9 新特性 3:Java
黑泽君
2018/10/11
6270
一文看懂 Java8 的 Lambda表达式!
IT领域的技术日新月异,Java14问世了,但是对于国内的许多程序员来说,连Java8都还没有真正掌握。
程序员小跃
2020/04/10
4650
Java8 Lambda表达式详解手册及实例「建议收藏」
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号“程序新视界”,好好系列的学习一下Java8的新特性。Lambda表达式已经在新框架中普通使用了,如果你对Lambda还一无所知,真得认真学习一下本篇文章了。
全栈程序员站长
2022/09/08
1K0
[Java] Lambda表达式总结
Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。
用户3702315
2021/03/29
2720
【Java】:lambda 表达式
🔥 Lambda 表达式 是JDK8新增的特性,Lambda 表达式 可以取代大部分匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以将函数作为一个方法的参数,也就是函数作为参数传递到方法中,极大地优化代码结构JDK也提供了大量的内置函数式接口供开发者使用,使得 Lambda 表达式 的运用更加方便、高效。
IsLand1314
2024/12/20
1210
【Java】:lambda 表达式
Java8学习(3)- Lambda 表达式
猪脚:以下内容参考《Java 8 in Action》 本次学习内容: Lambda 基本模式 环绕执行模式 函数式接口,类型推断 方法引用 Lambda 复合 代码: https://github.com/Ryan-Miao/someTest/blob/master/src/main/java/com/test/java8/c3/AppleSort.java 上一篇: Java8学习(2)- 通过行为参数化传递代码--lambda代替策略模式 ---- 1. 结构 初始化一个比较器: Comparato
Ryan-Miao
2018/03/13
1.1K0
Java8学习(3)- Lambda 表达式
Lambda表达式详解
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
海向
2019/09/23
5300
1 什么是Lambda表达式
Lambda表达式的语法是非常简洁的,但是Lambda表达式不是随便使用的,使用时有几个条件要特别注 意
用户7630333
2023/12/07
1510
Java1.8之Lambda表达式
1、Java8的lambda表达式,通过lambda表达式可以替代我们之前写的匿名内部类来实现接口。lambda表达式本质是一个匿名函数。
别先生
2021/01/13
3620
Lambda表达式与函数式接口:什么是Lambda表达式?如何在JDK 8中实现匿名函数?
在JDK 8之前,写匿名类非常繁琐,代码冗长,特别是用来实现简单的功能时。JDK 8引入了Lambda表达式和函数式接口,让Java代码更加简洁、灵活。在本篇文章中,猫头虎将详细解析:
猫头虎
2024/12/18
1930
Lambda表达式与函数式接口:什么是Lambda表达式?如何在JDK 8中实现匿名函数?
【JDK8 新特性1】JDK 8 Lambda表达式
当需要启动一个线程去完成任务时,通常会通过 Runnable 接口来定义任务内容,并使用 Thread 类来启动该线程。
叫我阿杰好了
2022/11/07
3680
【JDK8 新特性1】JDK 8 Lambda表达式
相关推荐
六百字搞懂lambda表达式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档