文章目录

  • 案例1:函数式接口作为参数
    • 1. 1 原日志代码
    • 1.2 优化的代码
  • 案例2:函数式接口作为返回值
  • 实际开发中使用的

案例1:函数式接口作为参数

1. 1 原日志代码

public class Demo01Logger {//只有日志等级为1时,才会打印日志信息public static void showLog(int level, String massage){if(level==1){System.out.println(massage);}}public static void main(String[] args) {//定义三个日志信息String msg1 = "hello";String msg2 = "world";String msg3 = "java";showLog(1,msg1+msg2+msg3);}
}

  如代码所示,只有当level为1时,日志信息才会打印,但是当level为其他等级的时候,尽管不需要打印,但是日志信息已经完成拼接,此时会造成系统性能的浪费。

1.2 优化的代码

(1)函数式接口


/*** 函数式接口:有且只有一个抽象方法的接口,称之为函数式接口* 接口中可以包含其他方法,如:默认方法、静态方法、私有方法*/
@FunctionalInterface   //可以检测接口是否是一个函数式接口,不满足条件时编译失败
public interface messageBuilder {public abstract String builderMessage();
}

(2)优化代码

public class Demo02Logger {//只有日志等级为1时,才会打印日志信息public static void showLog(int level, messageBuilder mb){if(level==1){System.out.println(mb.builderMessage());}}public static void main(String[] args) {//定义三个日志信息String msg1 = "hello";String msg2 = "world";String msg3 = "java";//messageBuilder是一个函数式接口,所以可以传递Lambda表达式showLog(2,() -> {return msg1+msg2+msg3;});/*注意:Lambda表达式具有延迟加载的特性,当使用Lambda表达式将参数传递到对应的方法时,只有满足条件的情况下,才会对参数进行处理,不会存在性能的浪费例如:当日志等级为1时,才会调用builderMessage()方法,才会进行字符串拼接当日志等级不为1时,不会调用builderMessage()方法,也就不会进行字符串拼接*/}
}

案例2:函数式接口作为返回值

import java.util.Arrays;
import java.util.Comparator;public class ComparatorDemo {public static Comparator<String> getComparator(){//使用匿名内部类的方式实现返回接口/*return new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.length()-o2.length();//按照字符串长度升序排列}};*///使用Lambda表达式实现/*return (String o1, String o2)-> {return o1.length()-o2.length();//按照字符串长度升序排列};*///简化Lambda表达式return (o1, o2) -> o1.length()-o2.length();}//调用public static void main(String[] args) {String[] strs = {"aaa","bbbs","c","dd"};Arrays.sort(strs,getComparator());System.out.println(Arrays.toString(strs));}
}

实际开发中使用的


首先调用1,然后进入到具体的方法2中来,然后执行逻辑3,在到4,在调用4的时候执行apply方法的时候,跳转到5来,并且吧RedisClientFactory.getOrCreateClient(readUri)作为实参传入到5中的方法中来。

Java 函数式编程案例(函数式接口作为参数和返回值)相关推荐

  1. java分布式对象——远程方法中的参数和返回值+远程对象激活

    [0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java分布式对象--远程方法中的参数和返回值+远程对象激活 的相关知识: [1]远程方法中的参数和返回值 ...

  2. 重学Java(035)——Java基础知识(类作为成员变量、接口作为成员变量、接口作为方法参数和返回值类型)

    学习内容:三种引用类型用法 一.类作为成员变量 二.接口作为成员变量 三.接口作为方法参数和返回值类型 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进 ...

  3. Java基础二十二:函数式接口介绍,函数式接口作为方法参数、返回值,Supplier接口、Consumer接口、Predicate接口、Function接口基本介绍及其案例小练习

    函数式接口 1. 函数式接口概念及基本使用 1.函数式接口:有且仅有一个抽象方法的接口,函数式接口就是Lambda表达式使用的前提 2. Java中的函数式编程体现的就是Lambda表达式,所以函数式 ...

  4. python函数式编程 pdf-Python函数式编程指南(二):从函数开始

    2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: def add(x, y): return x + y 关于参数和返回值的语法细节可以参考其他文档,这里就略过了. 使用lambda ...

  5. Java面向对象编程——抽象类和接口

    Java面向对象编程--抽象类和接口 定义类的过程就是抽象和封装的过程,而抽象类与接口则是对实体类进行更高层次的抽象,进定义公共行为和特征. 抽象类: 如果一个类没有足够的信息去描述一个具体的对象,那 ...

  6. Java面向对象编程篇3——接口与抽象类

    Java面向对象编程篇3--接口与抽象类 1.接口(interface) 接口中可以含有变量和方法.但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是pub ...

  7. java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用

    类作为成员变量类型使用: 自定义的类也可以作为成员变量使用,如: // 1.创建一个电脑角色的类: public class Computer{private String computername; ...

  8. Java网络编程案例--CS模型的简单实现

    Java网络编程案例–CS模型的简单实现 Java网络编程案例CS模型的简单实现 基本概述 程序原理图 源代码 基本概述 该程序采用C/S模型,在服务器端简单的建立了一个多线程类,来实现对多个客户端传 ...

  9. java——接口作为方法的参数和返回值

    接口作为方法的参数和返回值 package cn.itcast.day11.demo07;import java.util.ArrayList; import java.util.List; /* j ...

最新文章

  1. 矿大计算机控制技术,潜心科研,匠心育人,来看看矿大这位带领国内顶尖团队的“大拿”的多面人生!...
  2. 三大测序平台芯片通量对比图
  3. 梯度下降法的三种形式-BGD、SGD、MBGD
  4. python图片-Python中的十大图像处理工具
  5. java web怎么样_怎么样自学Java web?
  6. android 流量统计不准确_汽车里程表上显示的百公里油耗准确吗?是不是真的是欢乐表...
  7. linux如何实现相关功能源代码
  8. 计算机语言wifi,Windows7WIFI热点设置器
  9. Modularity QuickStart学习
  10. 网络商务信息与计算机的关系,计算机与电子商务的关系,
  11. JDBC学习笔记(1)
  12. Echarts pie 饼图类型后显示数据
  13. 人究竟能抠到什么程度?
  14. 使用 APPLY 来为每行调用表值函数
  15. Android NDK开发之 ARM与NEON指令说明
  16. springboot+爱心捐赠小程序 毕业设计-附源码211711
  17. round在oracle里怎么用,Oracle round 函数(图)
  18. 虚拟桌面分屏_办公人员必备技能,WINDOWS桌面分屏,多个桌面视图互不干扰
  19. 主打“极致性价比”的酷玩7,能否让酷派再现辉煌?
  20. react 子组件回调父组件函数

热门文章

  1. 高能计算机在线计算,飞腾国产整机/国产化工控机/高能计算机GA-A3203工控整机...
  2. 后端开发基础——Web应用基础
  3. Linux中建立虚拟交换机,使用Open vSwitch做虚拟交换机制定网络解决方案
  4. Hyper-V新建静态IP虚拟交换机
  5. 小学生计算机课如何管教,少年巧编程| 如何给孩子选择编程课
  6. 推荐5款宝藏电脑软件,建议收藏
  7. 位操作(异或骚操作)
  8. 山东铝业职业技术学院计算机应用,山东铝业职业学院计算机系
  9. 请允许我水一篇文章~~
  10. Css高度自适应上下居中方式