Java8
1.Lambda(糖衣语法)
1.1目的:
- 优化匿名内部类
1.2 语法(->)
- 多条语句写‘{}’
- 一个参数,可以省略’()’
1.3 四大内置核心函数式接口
Consumer
void accept(T t);g
Supplier
T get();
Function<T,R>:
R apply(T t) ;
Predicate
boolean test(T t);
1.4 方法引用他与构造器引用
2. Stream API
2.1流
1 |
|
2.2 Stream创建步骤
2.2.1 创建Stream
- Collection的stream() & parallelStream();
- Arrays.stream();
- Stream.of();
- Stream.iterate();[seed 种子 开始]
2.2.2 操作Stream(惰性求值 一次性执行全部内容)
- 筛选与切片
- filter
- limit
- skip – 跳过元素,返回一个扔掉前n个元素的流。若不足n个,则返回 空流
- distinct – 去除重复的元素根据 hasCode() 与 equals();
- 映射
- map – 将元素转化成其他形式或提取信息
- flatMap – 把流中的所有值都换成另一个流,然后把所有流连接成一个流
联想list的add() & addAll() 方法
- 排序
- sorted() – comparable 自然排序
- sorted(Comparator com) – 定制排序
- 查找与匹配
- allMatch()
- anyMatch()
- noneMatch()
- findFirst()
- findAny()
- count()
- max()
- min()
- 归约
- reduce() 将流中元素反复结合起来,得到一个新值 —– map-reduce
- 收集
- collect() – 将流转化成其他形式 (Collectors 提供很多对集合处理的静态方法)
2.2.3 终止Stream
- forEach
3. 并行流与串行流
fork-join(工作窃取模式–自己线程没任务勒,就去其他线程去偷)
parallel 并行流(底层 使用fork-join)
4. Optional类
Optional 是一个容器类,代表一个值存在或不存在,可避免空指针异常
5. 接口中的默认方法
类优先原则
6. 时间与日期
新的时间与日期是不可变的,每次操作都会产生新的实例
6.1 JAVA8 之前时间存在的问题:
- 线程不安全
6.2 类
-
LocalDate、LocalTime、LocalDateTime
-
Instant(以 Unix 元年: 1970年1月1日 00:00:00 到某个时间的毫秒值)
-
Duration(时间之间的间隔)、Period(日期之间的间隔)
-
TemporalAdjuster (时间校准器、自定义时间)
-
DateTimeFormatter(格式化时间/日期)