教你利用Lambda将代码化繁为简 | 带你学《Java面向对象编程》之八十六

简介: 有没有觉得你的代码越来越繁琐呢?为了简化代码,JDK1.8推出了支持函数式编程的Lambda表达式。本节简单介绍了Lambda表达式的一些基本信息。

上一篇:看我72变-多变的内部类 | 带你学《Java面向对象编程》之八十五
【本节目标】
通过阅读本节内容,你将了解到使用Lambda表达式可以简化满足SAM要求的代码实现,并初步学会Lambda表达式的使用方法。

Lambda表达式

从JDK1.8开始为了简化使用者进行代码的开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程。对于函数式编程比较著名的语言:haskell、Scala,利用函数式编程可以避免掉面向对象编程之中的一些繁琐的处理问题。
面向对象在其长期发展的过程之中一直有一部分的反对者,这些反对者认为面向对象的设计过于复杂,过于繁琐了。以一个最简单的程序为例。
范例:观察传统开发中的问题

interface IMessage{
    public void send(String str);
}
public class JavaDemo{
    public static void main(String[] args) {
        IMessage msg = new IMessage(){
            public void send(String str) {
                System.out.println("消息发送:"+ str);  //发送消息:www.mldn.cn
            }
        };
        msg.send("www.mldn.cn");
    }
}

在这样一个程序里面,实际上核心的功能只有一行语句“System.out.println("消息发送:"+ str);”,但是为了这一行的核心语句依然需要按照完整的面向对象给出的设计结构进行开发。于是这些问题随着技术的发展也是越来越突出了。
范例:使用Lambda表达式实现与之前完全一样的功能

interface IMessage{
    public void send(String str) ;
}
public class JavaDemo {
    public static void main(String[] args) {
        IMessage msg = (str)->{
            System.out.println("发送消息:"+ str) ;
        };
        msg.send("www.mldn.cn") ;
    }
 }

现在整个程序代码里面真的只是编写了一行语句,于是利用这种形式就避免了复杂的面向对象结构化的要求。

Lambda表达式如果要想使用,那么必须有一个重要的实现要求:SAM(Single Abstract Method),只有一个抽象方法,以之前的IMessage接口为例,在这个接口里面发现只是提供有一个send()方法,除此之外没有任何的其他方法定义,所以这样的接口就被称为函数式接口,而只有函数式接口才可以被Lambda表达式所使用。
范例:使用函数式接口注解

@FunctionalInterface       //函数式接口
interface IMessage{
    public void send(String str) ;
}
public class JavaDemo {
    public static void main(String[] args) {
        IMessage msg = (str)->{
            System.out.println("发送消息:"+ str) ;
        };
        msg.send("www.mldn.cn") ;
    }
 }

对于Lambda表达式而言,提供有如下几种格式:

  • 方法没有参数:()->{};
  • 方法有参数:(参数,参数)->{};
  • 如果现在只有一行语句返回:(参数,参数)->{语句};

范例:定义没有参数的方法

@FunctionalInterface       //函数式接口
interface IMessage{
    public void send() ;
}
public class JavaDemo{
    public static void main(String[] args) {
        IMessage msg = ()->{
             System.out.println("发送消息:www.mldn.cn") ;
        };
        msg.send() ;
    }
 }

范例:定义有参数的处理形式

@FunctionalInterface       //函数式接口
interface IMath{
    public int add(int x ,int y) ;
}
public class JavaDemo{
    public static void main(String[] args) {
         IMath math = (t1,t2)->{
              return t1 + t2 ;
         };
         System.out.println(math.add(10,20)) ;
    }
 }

以上的表达式之中你会发现只有一行语句,这个时候也可以进一步简化

范例:简化Lambda操作

@FunctionalInterface       //函数式接口
interface IMath{
    public int add(int x ,int y) ;
}
public class JavaDemo{
    public static void main(String[] args) {
        IMath math = (t1,t2)->t1 + t2 ;
        System.out.println(math.add(10,20)) ;
    }
 }

利用Lambda表达式的确可以摆脱传统面向对象之中关于结构的限制,使得代码更加的简便。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你如何引用方法 | 带你学《Java面向对象编程》之八十七
更多Java面向对象编程文章查看此处

相关文章
|
9天前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
85 2
|
11天前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
88 3
|
12天前
|
Java
怎么用Java 代码示例来展示继承的实现
本文通过Java代码示例展示继承机制:Animal为父类,Cat和Dog继承其属性与方法,并实现构造函数调用、方法重写与特有功能扩展,体现代码复用与多态特性。
50 4
|
26天前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
131 3
|
13天前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
190 0
|
2月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
|
2月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
359 211
|
1月前
|
缓存 Java 开发者
Java 开发者必看!ArrayList 和 LinkedList 的性能厮杀:选错一次,代码慢成蜗牛
本文深入解析了 Java 中 ArrayList 和 LinkedList 的性能差异,揭示了它们在不同操作下的表现。通过对比随机访问、插入、删除等操作的效率,指出 ArrayList 在多数场景下更高效,而 LinkedList 仅在特定情况下表现优异。文章强调选择合适容器对程序性能的重要性,并提供了实用的选择法则。
107 3
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
288 125