首页 > 编程语言 >函数式编程-Lambda的延迟执行

函数式编程-Lambda的延迟执行

时间:2022-08-20 21:34:43浏览次数:75  
标签:String msg3 show 编程 日志 Lambda public 延迟

函数式编程

在兼顾面向对象特性的基础上,Java语言通过Lambda表达式与方法引用等,为开发者打开函数式编程的大门,下面我们做一个初探

Lambda的延迟执行

 有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费,而Lambda表达式是延迟执行的,这正可以作为解决方案,提升性能

性能浪费的日志案例

注:日历可以帮助我们快速的定位问题 记录程序运行过程中的情况 以便项目的监控和优化

日志案例:

代码:

/*
性能浪费的日志案例:
    发现以下代码存在的一些性能浪费的问题
    调用show方法,传递的第二个参数是一个拼接后的字符串
    先把字符串拼接好,在调用show
    show方法如果传递的日志等级不是一级那么就不会输出拼接后的字符串
    所以感觉字符串就白拼接了,存在了浪费
 */
public class AshowLog {
    //定义一个根据日志的级别,显示日志信息的方法
    public static void show(int level,String message){
        //对日志的等级进行判断,如果是1级别,那么输出日志信息
        if (level==1){
            System.out.println(message);
        }
    }
    public static void main(String[] args) {
        //定义三个日志信息
        String msg = "Hello";
        String msg2 = "World";
        String msg3 = "java";
        //调用show方法,传递日志级别和日志信息
        show(1, msg+msg2+msg3);
    }
}

 

使用Lambda优化日志案例

Lambda的特点:延迟加载

Lambda的使用前提 必须存在函数式接口

函数式接口:

public interface BFunctionalInterface2 {
    public abstract String method();
}

类:

public class AshowLog2 {
    public static void show(int level,BFunctionalInterface2 bf){
        if (level==1){
            System.out.println(bf.method());
        }
    }

    public static void main(String[] args) {
        String msg = "Hello";
        String msg2 = "World";
        String msg3 = "java";
        show(2,()->{
            return  msg+msg2+msg3;
        });
    }
}

使用Lambda表达式做完参数传递 仅仅是把参数传递到showLog方法中

只有满足条件 日志的等级是1级才会调用接口MessageBuilder中的方法builderMessage 才会进行字符串的拼接

如果条件不满足 日志的等级不是1级 那么MessageBuilder中的方法builderMessage 不会执行 

所以不存在新能的浪费

测试代码:

public class AshowLog2 {
    public static void show(int level,BFunctionalInterface2 bf){
        if (level==1){
            System.out.println(bf.method());
        }
    }

    public static void main(String[] args) {
        String msg = "Hello";
        String msg2 = "World";
        String msg3 = "java";
        show(1,()->{
            System.out.println("程序合理执行");
            return  msg+msg2+msg3;
        });
    }
}

 

运行结果:

 

标签:String,msg3,show,编程,日志,Lambda,public,延迟
From: https://www.cnblogs.com/qihaokuan/p/16608524.html

相关文章

  • c++ lambda学习举例
    #include<iostream>#include<vector>#include<algorithm>#include<cmath>#include<ctime>usingstd::cout;usingstd::vector;usingstd::srand;usingstd::time......
  • 并发编程的艺术
    现在我们介绍避免死锁的几个常见方法。❑避免一个线程同时获取多个锁。❑避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。❑尝试使用定时锁,使......
  • Java--网络编程基础
    网络编程网络编程指的是编写跨多个设备(计算机)执行的程序,设备使用网络彼此连接J2SEAPI的java.net包中包含一组类和接口,它们提供低级别的通信详细信息,开发者可编写专注......
  • 基于django中间件的编程思想
    基于django中间件的编程思想在django中,中间件的形式全部写成了列表套字符串的形式MIDDLEWARE=['django.middleware.security.SecurityMiddleware','django.c......
  • 网络编程-综合案例-文件上传原理
    文件上传原理1.【客户端】输入流,从硬盘读取文件数据到程序中。2.【客户端】输出流,写出文件数据到服务端。3.【服务端】输入流,读取文件数据到服务端程序。4.【服务端】......
  • [编程题]仓库配送(最短路, Dijskra)
    [编程题]仓库配送#最短路径,Dijskrafromcmathimportcosfromheapqimport*fromcollectionsimportdefaultdictN,K,M=list(map(int,input().strip().sp......
  • java8中的lambda表达式实用详解
    java8中的lambda表达式实用详解1.lambda简介​ Lambda表达式(lambdaexpression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda......
  • [编程题]项目经理(二分图)
    项目经理参考,模板'''二分图,匈牙利算法最大匹配数:最大匹配的匹配边的数目最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择最大独立数:选取最多......
  • 网络编程-TCP通信程序(下)代码
     TCP通信的客户端:向服务器发送连接请求,给服务端发送数据,读取服务端回写的数据表示客户端的类:java.net.Socket:该类实现客户端套接字(也称为“套接字”)。套接字是两台机器......
  • PowerShell教程 - 编程结构(Program Struct)- 第二部分
    更新记录转载请注明出处。2022年8月20日发布。2022年8月15日从笔记迁移到博客。字符串(String)说明本质就是.NETSystem.Stringtype使用字符串的索引(Indexingi......