不可变集合的特点? 定义完成后不可以修改,或者添加、删除
如何创建不可变集合? List、Set、Map接口中,都存在of方法可以创建不可变集合。
Stream流
在Java 8中,得益于Lambda所带来的函数式编程, 引入了一个全新的Stream流概念。
目的:用于简化集合和数组操作的API。
说说Stream流的思想和使用步骤:
先得到集合或者数组的Stream流(就是一根传送带)。流只能使用一次!
把元素放上去, 然后就用这个Stream流简化的API来方便的操作元素。
1、集合获取Stream流的方式? 集合获取Stream的方式是通过调用stream()方法实现的。
2、数组获取Stream流的方式?
名称 | 说明 |
public static <T> Stream<T> stream(T[] array) | 获取当前数组的Stream流 |
public static<T> Stream<T> of(T... values) | 获取当前数组/可变数据的Stream流 |
Stream流的常用API(中间操作方法)
名称 | 说明 |
Stream<T> filter(Predicate<? super T> predicate) | 用于对流中的数据进行过滤。 |
Stream<T> limit(long maxSize) | 获取前几个元素 |
Stream<T> skip(long n) | 跳过前几个元素 |
Stream<T> distinct() | 去除流中重复的元素。依赖(hashCode和equals方法) |
static <T> Stream<T> concat(Stream a, Stream b) | 合并a和b两个流为一个流 |
Stream流的常见终结操作方法
名称 | 说明 |
void forEach(Consumer action) | 对此流的每个元素执行遍历操作 |
long count() | 返回此流中的元素数 |
Stream流的收集方法
名称 | 说明 |
R collect(Collector collector) | 开始收集Stream流,指定收集器 |
Collectors工具类提供了具体的收集方式
名称 | 说明 |
public static <T> Collector toList() | 把元素收集到List集合中 |
public static <T> Collector toSet() | 把元素收集到Set集合中 |
public static Collector toMap(Function keyMapper , Function valueMapper) | 把元素收集到Map集合中 |
异常
Error: 系统级别问题、JVM退出等,代码无法控制。
Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题
RuntimeException及其子类:运行时异常,编译阶段不会报错。 (空指针异常,数组索引越界异常) 除RuntimeException之外所有的异常:编译时异常,编译期必须处理的,否则程序不能通过编译。 (日期格式化异常)。
异常处理方式1 —— throws
方法 throws Exception{ }
异常处理方式2 —— try…catch…
监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。
这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。
异常处理方式3 —— 前两者结合
方法直接将异通过throws抛出去给调用者,调用者收到异常后直接捕获处理。
在开发中按照规范来说第三种方式是最好的:底层的异常抛出去给最外层,最外层集中捕获处理。 实际应用中,只要代码能够编译通过,并且功能能完成,那么每一种异常处理方式似乎也都是可以的。
自定义异常的分类
1、自定义编译时异常
定义一个异常类继承Exception. 重写构造器。 在出现异常的地方用throw new 自定义对象抛出, 作用:编译时异常是编译阶段就报错,提醒更加强烈,一定需要处理!!
2、自定义运行时异常
定义一个异常类继承RuntimeException. 重写构造器。 在出现异常的地方用throw new 自定义对象抛出! 作用:提醒不强烈,编译阶段不报错!!运行时才可能出现!!