java8新特性
2021-06-10 06:03
标签:时区 long || exce slist 有一个 变量 重复 理解 1、 JAVA8的主要变化 ? 新日期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 函数式编程 概论 语法核心问题: 使用场景 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 Stream 分为描述和终结 4.1 filter 滤除 4.2 map 映射,变换 4.3 reduce 对每个元素进行一些运算 acc累计值,curr当前值 reduce 实现list reduce 实现map 4.4 sorted sorted方法用于对流中的元素进行排序 List 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 Goupby 可以分层进行排序 8、IntStream.rangeClosed() boxed装箱一下,变为stream java8新特性 标签:时区 long || exce slist 有一个 变量 重复 理解 原文地址:https://www.cnblogs.com/majingyun/p/14462641.html
? 函数式编程
? 语法改进: lambda表达式,方法引用,默认方法…
? 新的类库: Stream, Optional…
? 已有API增强: collections..comparator
? Concurrent
? LongAdder & LongAccumulator
? CompletableFuture
? 其他
? 新JS引擎
? 重复注解
? API 增强
? 理解 JAVA 8 函数式编程
? 函数可作为参数
? 函数可作为返回值
语法糖
? 省略大括号
? 省略参数括号
? 省略参数类型
? 引用类定义上的任意对象实例方法
? 引用静态方法
? 引用构造函数
? collect
上一篇:Java概要