一、Stream API
概念 :主要是操作数组和集合,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用Stream API来并行执行操作
Stream特点:
1、自己不会存储数据
2、不会改变原对象,处理时会建立新的Stream对象。
3、Stream是延时操作,只有等到需要结果的时候,才会去执行。
如何使用Stream API:
1、创建一个Stream
2、在一个或者多个步骤中,将一个初始Stream转化到另一个Stream的中间操作
3、使用终止操作来产生一个结果,该操作会强制他之前的延迟操作执行。在此之后该Stream就不会再被使用
1、Stream的创建方法:
forEach()是一个终止操作,后面不能再跟操作
2、Stream的中间操作
中间操作包括:map (mapToInt, flatMap 等)、 filter(从流中过滤元素)、distinct(筛选)、sorted(排序)、peek、 limit(限制,使元素不超过给定数量)、skip(跳过元素)、parallel、sequential、 unordered。
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理! 而在终止操作时一次性全部处理,称为“惰性求值”。
筛选或切片:
映射:
含义:1、提取集合或者数组元素
2、将集合或者数组中的元素转换成其他形式存储(字母小写变大写,不会破环原集合)
排序:
3、Stream的终止操作
终止操作包括:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、 allMatch、noneMatch、findFirst、findAny、iterator。
allMatch——检查是否匹配所有元素
anyMatch——检查是否至少匹配一个元素
noneMatch——检查是否没有匹配的元素
findFirst——返回第一个元素
findAny——返回当前流中的任意元素
count——返回流中元素的总个数
max——返回流中最大值
min——返回流中最小值
4、并行操作
Stream有并行和串行两种操作,串行Stream上的操作是在一个线程中依次完成,而并行Stream则是在多个线程 上同时执行。
并行创建的方式:
效率高于串行
二、日期
旧版的Java中,存在着很多的问题。(Date SimpleDateFormat)
1、非线程安全问题 旧版的Java类中所有的日期类都是可变的
2、设计很差
3、时区处理很麻烦
java8之后开始使用:LocalDate LocalDateTime