教你利用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面向对象编程文章查看此处

相关文章
|
16天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
1月前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
41 5
Java反射机制:解锁代码的无限可能
|
18天前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
20天前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
25天前
|
Java API 开发者
Java中的Lambda表达式与函数式编程####
在Java的演变过程中,Lambda表达式和函数式编程的引入无疑是一次重大的飞跃。本文将深入探讨Lambda表达式的定义、用法及优势,并结合实例说明如何在Java中利用Lambda表达式进行函数式编程。通过对比传统编程方式,揭示Lambda表达式如何简化代码、提高开发效率和可维护性。 ####
|
2天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
27天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
60 3
|
5天前
|
安全 Java API
Java中的Lambda表达式与Stream API的高效结合####
探索Java编程中Lambda表达式与Stream API如何携手并进,提升数据处理效率,实现代码简洁性与功能性的双重飞跃。 ####
18 0
|
28天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
26天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别