Java8 VS ES6【循环篇】
友情提示:java8和ES6的内容很多,本文简单介绍几个方法。来替代项目中的for循环
B站视频教程
https://www.bilibili.com/video/av86795917
前言
这里展示两段代码,具体代码没什么意义,主要看代码的行数,与结构
使用Lambda表达式之前
使用Lambda表达式之后
有木有精简很多!!!有木有逼格高了很多!!!有木有看不懂了很多!!!
为啥要把Java8Lambda和ES6箭头函数联系在一起说呢?
因为他们真的太像了,虽然java和javascipt就像是老婆和老婆饼一样没什么关系的两个语言。
但他们却又很多地方都是神类似的。
来看看Lambda和ES6的到底有哪些一样的方法?
这些方法实现的功能几乎一毛一样滴,so,一次学习两边受用。
java8新特性【循环篇】
准备工作
创建一个Main类,在类中添加如果下代码,此方法主要用于替代 System.out.println输出信息
后面的所有 log()==System.out.println();
1 | //System.out.println的简化版 |
Lambda 表达式 基础用法说明
jdk1.8之前的函数式接口有哪些?
java.lang.Runable
java.util.concurrent.Callable
java.util.Comparatorjdk1.8之后的函数式接口有哪些?
Supplier 一个输出
Consumer 一个输入
BiConsumer 两个输入
Function 一个输入,一个输出(类型可能不同)
BiFunction 两个输入,一个输出(类型可能不同)
UnaryOperator 一个输入,一个输出(输入输出的类型是一致的)
BiaryOperator 两个输入,一个输出(输入输出的类型是一致的)
练习1 Lambda 表达式 基础用法
1 | public static void testLambda1() { |
练习2 ::的方法的使用
1 | public static void testLambda2() { |
练习3 Stream Api的基础用法
1 | public static void streamApi() { |
Stream中有很多API,可大致分为两类。
一种是返回值依然是Stream对象的。如下
过滤filter
去重distinct
排序sorted
截取limit、skip
转换map/flatMap
窥视peek
另一种是没有返回的。如下
循环forEach
计算min、max、count、average
匹配anyMatch、allMath、noneMathch、findFirst、findAny
汇集reduce
收集器toArray collect
练习4 Stream Api实战
准备两个对象,此处省略了get set方法
1 | class User { |
测试代码
1 | public static void streamApiActualCombat() { |
ES6新特性【循环篇】
1 |
|
ES6原文链接
https://www.cnblogs.com/bigfire/p/9518100.html
总结:
优点:
简洁。
非常容易并行计算。
可能代表未来的编程趋势。
结合 hashmap 的 computeIfAbsent 方法,递归运算非常快。java有针对递归的专门优化。
缺点:
若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)
不容易调试。
若其他程序员没有学过 lambda 表达式,代码不容易让其他语言的程序员看懂。
在 lambda 语句中强制类型转换貌似不方便,一定要搞清楚到底是 map 还是 mapToDouble 还是 mapToInt