java8的新特性就是Lambda表达式,那么,Lambda表达式到底能带来哪些优点。我这里总结一个最最最常见的优点--性能优化。

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口可以被隐式转换为 lambda 表达式。

一:优化性能

先看一段常见的程序

public class MyLambda {public static void showLog(int level, String mess) {if (level == 1) {System.out.println(mess);}}public static void main(String[] args) {String mess1 = "Hello";String mess2 = "java";showLog(1, mess1 + mess2);}
}

这段程序很简单,但是,会造成性能上的浪费。你看啊,这里调用showLog函数,直接传递1以及mess1和mess2拼接好的字符串传过去,显示Hellojava。但是,如果传递的level是不是1,那么,就不会输出Hellojava,但是,还是会把mess1和mess2拼接好的字符串传递过去。

下来,看一下Lambda表达式写这段程序。

函数式接口IMyLambda

@FunctionalInterface
public interface IMyLambda {String buildMess();
}

测试类

public class MyLambda {public static void showLog(int level, IMyLambda mess) {if (level == 1) {System.out.println(mess.buildMess());}}public static void main(String[] args) {String mess1 = "Hello";String mess2 = "java";//此处,第二个参数是函数式接口类型,可以写Lambda表达式进行表示showLog(1, () -> {return mess1 + mess2;});}
}

与上面普通方法不同的是:上面的会把拼接字符串mess1 + mess2传给showLog函数;

而使用Lambda表达式,仅仅是把参数传递到showLog方法中,如果第一个参数level是1,才会调用接口IMyLambda中的方法buildMess方法,才会进行字符串的拼接。否则,如果不是1,那么就不会调用接口中的方法,不会进行字符串的拼接。所以,Lambda表达式在一定程度上,优化了程序。

二:书写简单

Lambda表达式和匿名内部类很像,比如:

Lambda表达式写法:

showLog(1, () -> {return mess1 + mess2;
});

匿名内部类写法:

showLog(1, new IMyLambda() {@Overridepublic String buildMess() {return mess1 + mess2;}
});

但是,Lambda仅仅适用于函数式接口,所以,在参数为函数式接口的方法中,我们可以尽量使用Lambda表达式,不仅书写简单,还能优化性能。比如,最有名的Runnable接口的run()方法了。

函数式接口:Lambda表达式的优点相关推荐

  1. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  2. 函数式接口 lambda表达式 方法引用

    拉呱: 终于,学习jdk8的新特性了,初体验带给我的感觉真爽,代码精简的不行,可读性也很好,而且,spring5也是把jdk8的融入到血液里,总之一句话吧,说的打趣一点,学的时候自己难受,学完了写出来 ...

  3. 函数式编程 lambda表达式

    函数式编程 lambda表达式 从JDK1.8之后为了简化程序的开发,专门提供了lambda表达式的支持,可以简化编程中接口的复杂操作: 范例: 观察以下传统开发中的问题 public interfa ...

  4. 学习 Java 8 - 函数式接口 Lambda

    学习 Java 8 - 函数式接口 Java 8 引入了函数式接口的概念.函数式接口其实就是只包含一个抽象方法的普通 Java 接口.在没有引入函数式接口之前,我们通常使用内部类和匿名类来实现类似的功 ...

  5. 函数式编程[Lambda 表达式,Optional,Stream流]从入门到精通(一)

    文章目录 函数式编程.stream流 1.概述 1.1 学习目的 1.2 函数式编程思想 2.lambda表达式 2.1 概述 2.2 省略规则 3. stream流 3.1 概述 3.2 功能 3. ...

  6. Java8函数式编程(Lambda表达式,Stream流,Optional)

    目录 一.函数式编程思想 二.lambda表达式 1.概念 2.Lambda表达式对接口的要求 ​编辑​编辑​编辑 3.Lambda表达式的语法 4.函数引用 4.1引用一个静态方法 4.2引用一个非 ...

  7. java函数式编程例子_java函数式编程Lambda表达式的示例(一)

    函数式编程是时下比较流行的编程方式了,很多新兴的编程语言都对函数式编程有了比较好的支持,她有别于传统的命令式编程,可以将函数(执行代码的过程)作为参数进行传递.JAVA也意识到了函数式编程的重要性,在 ...

  8. 【怎样写代码】函数式编程 -- Lambda表达式(四):Lambda表达式与Expression树

    如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, you can give me the greates ...

  9. 【怎样写代码】函数式编程 -- Lambda表达式(三):LINQ初步

    如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, you can give me the greates ...

最新文章

  1. 【廖雪峰python入门笔记】list_替换元素
  2. 学习新技能时,大脑在如何发生改变?
  3. Linux基础(9)文本处理三剑客之grep
  4. MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
  5. Py之openpyxl:openpyxl库的简介、安装、使用方法之详细攻略
  6. Sitecore安全性第1部分:自定义角色和权限
  7. C++11 initializer_list 和 Range-based for loop 学习理解
  8. [译]NectarJS:编译JavaScript为任意平台原生二进制代码
  9. activity(流程引擎)从零入门到实战学习
  10. 了解jvm自动内存分配和内存自动回收的重要性
  11. 手机学linux软件下载,Linux标准教科书下载
  12. 最新战火互娱JS逆向分析实战教程
  13. JSTL简介以及简单示例
  14. Navicat Premium 15安装需要注意的几个细节
  15. HPlaserjet1020打印机无法识别
  16. 苹果发布 iOS 14 Beta 8 iphone 14 GM要来咯
  17. 性格测试c语言程序,性格测试的题目及答案
  18. 2016年腾讯校招笔试题
  19. 计算机实习生听课记录,实习生听课记录
  20. flask 图文混排

热门文章

  1. 【python数据分析模块教程】2——pandas基础简介以及运用
  2. 28 字符串排列(还差点,list包含、Arrays、Collections的sort)全排列
  3. 脑蛋白和计算机意义,冬眠蝙蝠的脑蛋白质组与肝蛋白质组研究
  4. CSS进阶(7)- 样式补充
  5. grid布局浏览器兼容_grid布局适配IE
  6. 科罗拉多大学波尔得分校计算机科学,科罗拉多大学波尔得分校副教授Dan Zhang:基于线性规划的近似动态规划方面的一些最新成果...
  7. 【小罗的hdlbits刷题笔记5】基于fifo思想的fsm设计(Exams/2014 q3fsm)
  8. 计算机课程设计收费管理系统,C语言机房收费管理系统课程设计
  9. 管中窥豹——应试教育与一流科学人才差距有多远
  10. 《良乔说软件》第一回 问君情深深几许?我的眼里只有你