Java 8新增的日期、时间格式器
在java.time.format包下提供了一个DateTimeFormatter格式器类,它相当于 DateFormat和SimpleDateFormat的合体,所以在使用前也要获取他的对象,获取DateTimeFormatter的对象有下面三种常用方法
1.调用DateTimeFormatter的format(TemporalAccessor temporal)方法执行格式化,其中LocalDate、LocalDateTime、LocalTime 等类都是TemporalAccessor接口的实现类。
2.调用LocalDate、 LocalDateTime、 LocalTime 等日期、时间对象的format(DateTimeFormatterformatter)方法执行格式化。
这两种都是把日期时间格式化成字符串的方法。
使用DateTimeFormatter 将指定格式的字符串解析成日期、时间对象( LocalDate、LocalDateTime、LocalTime 等实例),可通过日期、时间对象提供的parse(CharSequence text,DateTimeFormatter formatter)方法进行解析。
java集合概述
为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于java.util包下。
集合里只能是对象(数组里还可以是基本数据类型)
Java的集合类主要由两个接口派生而出:Collection和Map;
集合三大类:Set集合像一个罐子,他记不住进来的顺序,所以不能有重复的数据;List像是长度可变的数组;Map也像个罐子,但他除了元素本身的值还有一个映射值。
Collection和Iterator接口
Collection接口是List、Set 和Queue接口的父接口,他里面的方法时三个子接口所通用的,集合类就像容器,容器的功能,无非就是添加对象、删除对象、清空容器、判断容器是否为空等,集合类就为这些功能提供了对应的方法。
Java 8为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法所需参数的类型是一个函数式接口,而Iterable接口是Collection接口的父接口,因此Collection集合也可直接调用该方法。
forEach()方法会自动将集合元素一个个传给Lambda当形参,由此Lambda表达式遍历集合元素。
Iterable接口里的四种方法:
1.boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回true。
2.Object next():返回集合里的下一个元素。
3.void remove():删除集合里上一次next方法返回的元素。
4.void forEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。
Iterator 仅用于遍历集合,Iterator 本身并不提供盛装对象的能力,要创建Iterator对象,则必须有一个被迭代的集合。
Iterator迭代时只是把集合元素的值传给了迭代变量,集合元素本身不会被影响。Iterator的remove(方法删除上一次next(方法返回的集合元素才可以改变集合元素。
Iterator的forEachRemaining(Consumer action)方法所需的Consumer参数同样也是函数式接口。调用Iterator 的forEachRemaining(Consumer action)遍历集合元素时,程序会将集合元素传给Consumer的accept(T t)方法(该接口中唯一的抽象方法)
foreach也能迭代访问集合元素,同样不对集合元素本身造成影响。
Collection集合的removeIf(Predicate filter)方法会批量删除符合filter条件的所有元素。该方法需要-一个Predicate (谓词)对象作为参数,Predicate 也是函数式接口,因此可使用Lambda表达式作为参数。Predicate还有很多其他方法可以进行很多操作。
Stream操作集合对于元素不同的数据类型有不同的流。
独立使用Stream的步骤如下:
1.使用Stream或XxxStream的builder()类方法创建该Stream对应的Builder.
2.重复调用Builder的add0方法向该流中添加多个元素。
3.调用Builder的buildQ方法获取对应的Stream。
4.调用Stream的聚集方法。
中间方法:中间操作允许流保持打开状态,并允许直接调用后续方法。上面程序中的map0方法就是中间方法。中间方法的返回值是另外-一个流。
末端方法:末端方法是对流的最终操作。当对某个Stream执行末端方法后,该流将会被“消耗”且不再可用。上面程序中 的sum()、count()、 average(等 方法都是末端方法。
有状态的方法:这种方法会给流增加一-些新的属性,比如元素的唯一性、元素的最大数量、保证元素以排序的方式被处理等。有状态的方法往往需要更大的性能开销。
短路方法:短路方法可以尽早结束对流的操作,不必检查所有的元素。
Stream常用中间方法:
利用Stream对集合进行操作最为便捷(好的总在后面)
集合:我们只要记住把集合看成容器,重要的就是对他的几种的操作方法