java8新特性以及原因_java8新特性

1、 JAVA8的主要变化

• 新日期API

• 函数式编程

• 语法改进: lambda表达式,方法引用,默认方法…

• 新的类库: Stream, Optional…

• 已有API增强: collections..comparator

• Concurrent

• LongAdder & LongAccumulator

• CompletableFuture

• 其他

• 新JS引擎

• 重复注解

• API 增强

2、 新日期API

2.1  Instant 绝对时间。

Duration 时间段

2.2   ZonedDateTime  LocalDateTime

日历时间,相对时间,API基本相同

区别:ZonedDateTime 是一个带时区的时间,LocalDateTime是不带时区的时间;有条件的话尽量带上时区

ZonedDateTime 提供许多便捷的方法如isAfter、时间的加减

2.3 DateTimeFormatter

日期的序列化和反序列化

2.4 TemporalAdjusters

日期格式的调整

3、 java 8 函数式编程

概论

• 理解 JAVA 8 函数式编程

语法核心问题:

• 函数可作为参数

• 函数可作为返回值

使用场景

Lambda 表达式语法

函数式接口

方法引用

Stream API

3.1 Lambda表达式语法

语法糖

• 省略大括号

• 省略参数括号

• 省略参数类型

3.2 Lambda 演算

自由变量访问规则: 最终不可变

3.3 函数式接口(SAM)

接口有默认静态方法

default void forEeach(Consumer Super T> action){

Objects.requireNonNull(action);

For(T t:this){

action.accept(T)}

}

3.4 方法引用

用::分割

• 引用实例方法

• 引用类定义上的任意对象实例方法

• 引用静态方法

• 引用构造函数

• void-compatibility rule

Consumer  runnable不需要返回值,也可以调用有返回值的方法

参数是严格要求的

4、stream和list的区别

Stream 是一个无限的流,可以并行处理,Sream 只能消费一遍,描述了一个操作,最后累加在一起;

• filter/map/reduce

• collect

Stream 分为描述和终结

4.1 filter 滤除

4.2 map 映射,变换

4.3 reduce 对每个元素进行一些运算 acc累计值,curr当前值

reduce 实现list

reduce 实现map

4.4 sorted

sorted方法用于对流中的元素进行排序

List sortedEmp = employees.stream().sorted(Comparator.comparing(Employee::getSalary)).collect(Collectors.toList());

4.4 函数式编程的利与弊

利:代码的维护性好、简洁

弊:过于抽象

4.5 transducer模式

5、CompletableFuture

• Future的局限性:

多个异步任务协作时,存在局限性

• 核心API:

completedFuture()/ [supply|run](Async) /

Then[apply|accept|run]([Both|Either]) (Async)

get() vs join()

future ,维护性查,调换一下顺序会影响并发。

completedFuture 提供一些描述性的概念,把逻辑描述清楚。

thenApply 告诉下一个function 是什么

Async 有的话是一步开始,没有的话执行完前一个任务再执行下一个。

get() vs join() 拿到结果

CompletableFuture 实现上述逻辑:

get 和 join的区别:

1).相同点:

join()和get()方法都是用来获取CompletableFuture异步之后的返回值

2).区别:

1.join()方法抛出的是uncheck异常(即未经检查的异常),不会强制开发者抛出,

会将异常包装成CompletionException异常 /CancellationException异常,但是本质原因还是代码内存在的真正的异常,

2.get()方法抛出的是经过检查的异常,ExecutionException, InterruptedException 需要用户手动处理(抛出或者 try catch)

allOf/anyOf

1)CompletableFufure.allof(CompletableFufure...c) 一组异步方法都执行成功时返回CompletableFuture方法。

2)CompletableFufure.anyOf( CompletableFufure...c )一组异步方法,有一个执行成功时就返回。

6、Optional

1>map 和 flatMap

flatMap 在option返回值为option,返回的是自己,stream返回stream

Functor & Monad

Functor ,通过map映射,不改变它的性质,如果flapMap 如果包了两层,会去掉一层

Function composition 组合函数,最后得到一个函数。

Compose andthen

Andthen 先运行自己

Compose 先运行别人

Compose 可以动态处理,如果option.的话就写死了。

7、Curry(柯里化)

每传1个参数就返回一个函数,直到参数全部传完。

8、Stream.collect

• Collectors 类

• ToMap

• Join

• groupingBy

Stream.collect() 是java 8 stream api中的终止方法。

Joining 比较方便,不用循环再链接了。

public class Main { public static void main(String[] args) { List list = Arrays.asList("springboot教程","springcloud教程","java教程","架构教程"); String result2 = list.stream().collect(Collectors.joining("||")); // 打印 springboot教程||springcloud教程||java教程||架构教程 System.out.println(result2); } }

Goupby 可以分层进行排序

8、IntStream.rangeClosed()

boxed装箱一下,变为stream

标签:Stream,教程,函数,stream,特性,API,方法,java8

来源: https://www.cnblogs.com/majingyun/p/14462641.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值