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

相关文章
|
10天前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
232 4
|
20天前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
191 115
|
20天前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
146 98
|
20天前
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
167 43
|
26天前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
272 94
|
26天前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
2月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
241 3
|
2月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
189 3
|
2月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
282 0
下一篇
开通oss服务