【人工智能时代的函数式编程:简化代码与提升效率】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

Lambda函数式编程含义

  • 这个函数类似于数学中的函数(强调做什么),只要输入的数据一致返回的结果也是一致的

    • 函数式编程:将函数整体作为对象来使用。
数学中的函数示例: 2x +1
Java中的函数(Lambda表达式): (x)-> 2x +1

函数式编程的使用条件及优点

  • 使用函数式编程代替某些匿名内部类对象,可以简化程序,加强代码可读性。

在这里插入图片描述

  • 上图中,左边的代码块是通过匿名内部类的写法,右边代码块是通过函数式编程实现的简化。

    • 左图中的操作:
      • 1.创建新的类,实现Runnable,但是类的名字是匿名的。
      • 2.创建了这个新类的实例 (一次性)。
      • 3.重写run方法。
    • 右图中的操作:
      • 1.将左边匿名内部类里面的重写run方法的参数列表提出来,然后指向 -> {被重写的run方法的方法体代码}。
        • 实际上就是只保留方法体内的参数列表及内部执行逻辑。
  • Lambda只能替代接口的匿名内部类,并且这个接口只有一个抽象方法。


函数式编程案例

普通实现方式

  • 假设现在要实现不同方式来发送相同的信息,我们可以先写一个信息的接口。
  • Message 接口
package thread.FunProexample;

public interface Message {
    void send();
}

  • Email 类
package thread.FunProexample;

public class Email implements Message{
    String emailaddress;

    //构造方法
    public Email(){

    }

    public void send(){
        System.out.println("这是·邮件。");
    }
}

  • Sms 类
package thread.FunProexample;

public class Sms implements Message{
    String phoneNumber;

    //构造方法
    public Sms(){

    }

    public void send(){
        System.out.println("这是·Sms。");
    }
}

  • main方法
package thread.FunProexample;

public class Main {
    public static void main(String[] args) {
        Message email = new Email();//实例化一个Email对象,(向上转型)因为Email类实现了Message接口,所以变量email的类型应该为Message
        //将上面的变量传入到sendMessage方法
        sendMessage(email);

        System.out.println("===============");
        //发送Sms消息
        Message sms = new Sms();
        sendMessage(sms);
    }

    public  static void sendMessage(Message message){
        //因为参数类型为message接口,所以无论传入的是Email还是Sms对象,它们都各自实现了Message接口的send方法
        //所以sendMessage只需要执行message的send方法,而不需要关心是哪个对象的send方法 -> 面向接口编程
        message.send();
    }
}

  • 在上面的类中我们实现了通过不同方式进行信息发送的效果
  • 但是我们每次实现不同的发送方式都需要创建一个新的类,这就会使得我们的文件变多,为了减少负荷,我们可以通过函数式编程来进行解耦合,上面我们谈过函数式编程是匿名内部类实现的简化,下面我们将会把这两种实现方式进行对比和总结。

匿名内部类和函数式编程的实现方式

  • main方法
package thread.Test2;

import thread.FunProexample.Email;
import thread.FunProexample.Sms;

public class Main {
    public static void main(String[] args) {
//        public void send(){
//            System.out.println("这是·邮件。");
//        }

        //匿名内部类的实现方式
        sendMessage(new Message() {
            @Override
            public Boolean send(String name1, String title) {
                System.out.println("这是·Sms to " + title + " " + name1);
                return true;
            }
        });


        //函数式编程的实现方式
        sendMessage((name1,title) ->{
            System.out.println("这是·Sms to " + title + " " + name1);
            return true;
        });
    }

    public  static void sendMessage(Message message){
        //因为参数类型为message接口,所以无论传入的是Email还是Sms对象,它们都各自实现了Message接口的send方法
        //所以sendMessage只需要执行message的send方法,而不需要关心是哪个对象的send方法 -> 面向接口编程
        Boolean status = message.send("Aileen","Sigma");
        System.out.println(status);
    }
}

  • 接口
package thread.Test2;

@FunctionalInterface
public interface Message {
    Boolean send(String name,String title);
//    Boolean send2(String name,String title);
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结:

  • lambda(函数式编程)以及匿名内部类的好处就是可以不用去创建多个类来实现这些方法,但是lambda相比于匿名内部类来说更加简化,无需重写抽象方法,只关注方法里面的实现过程。
    在这里插入图片描述

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

I'mAileen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值