Java 8新特性有哪些,能否详细介绍一下?

摘要:# Lambda表达式 ## 1.基本格式 ~~~java (参数列表)->{代码} ~~~ ## 2.省略规则 - 参数类型可以省略 - 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略 - 方法只
Lambda表达式 1.基本格式 (参数列表)->{代码} 2.省略规则 参数类型可以省略 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略 方法只有一个参数时小括号可以省略 Stream流 1.创建流 单列集合:集合对象.stream() 数组:Arrays.stream(数组对象) 或 Stream.of(数组对象) 双列集合:转换成单列集合后再创建 例: Map<String,Integer> map = new HashMap<>(); Stream<Map.Entry<String,Integer>> stream = map.entrySet().stream(); 2.中间操作 filter 可以对流中数据进行过滤,符合条件的才能留在流中 map 可以把对流中的元素进行计算或转换 distinct 可以去除流中的重复元素 sorted 可以对流中的元素进行排序 注意:如果调用空参的sorted()方法,需要流中的元素实现了Comparable limit 可以设置流的最大长度,超出的部分将被抛弃 skip 跳过流中的前n个元素,返回剩下的元素 flatMap map只能把一个对象转换成另一个对象来作为流中的元素。而flatMap可以把一个对象转换成多个对象作为流中的元素 3.终结操作 forEach 对流中的元素进行遍历操作,可以通过传入的参数去指定对遍历到的元素进行什么具体操作 count 可以用来获取当前流中元素的个数 max & min 可以用来计算流中的最值 collect 把当前流转换成一个 anyMatch 可以用来判断是否有任意符合匹配条件的元素,结果为Boolean allMatch 可以用来判断是否都符合匹配条件,结果为Boolean noneMatch 可以判断是否都不符合匹配条件,结果为Boolean findAny 获取流中的任意一个元素,该方法没有办法保证获取的一定是流中的第一个元素 findFirst 获取流中的第一个元素 reduce归并 对流中的数据按照自定义的计算方式计算出一个结果。(缩减操作) reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和在初始化值的基础上进行计算,计算结果再和后面的元素计算 内部的计算方式如下 T result = identity; for (T element : this stream) result = accumulator.apply(result,element) return result; 4.注意事项 惰性求值 (如果没有终结操作,没有中间操作是不会得到执行的) 流是一次性的(一旦一个流对象经过一个终结操作后,这个流就不能再被使用) 不会影响原数据 (我们在流中可以多数据做很多处理,但正常情况下是不会影响原来集合中的元素的。这往往也是我们期望的) Optional 1.创建对象 一般使用Optional的静态方法ofNullable来把数据封装成一个Optional对象,无论传入的参数是否为null都不会出现问题 Example example = getExample(); Optional<Example> exampleOptional = Optional.ofNullable(example); 在确定一个对象不为空的则可以使用Optional的静态方法of来把数据封装成Optional对象 Example example = getExample(); Optional<Example> exampleOptional = Optional.of(example); 如果一个方法的返回值类型是Optional类型,而如果我们经判断发现某次得到的返回值为null,这个时候就需要把null封装成Optional对象返回。这时则可以使用Optional的静态方法empty来进行封装。
阅读全文