1.Lambda 表达式(函数作为参数传递进方法中,免去了使用匿名方法的麻烦)
(parameters) -> expression 或 (parameters) ->{ statements; }
Collection接口方法removeIf
boolean removeIf(Predicate<? super E> filter) 根据条件删除列表中元素返回boolean
ps:用for(Object item:List list)循环列表时,增加删除元素,会抛出 java.util.ConcurrentModificationException
用for(int i = 0; i < list.size(); i++)时,增加删除元素,不会报错,但是由于i的增加和list.size()变化,如果没有i++,i--的话,列表结果和预期不同。
推荐使用: remove元素请使用Iterator方式
Predicate是个函数式接口
包括list排序使用的Comparator接口,都包含注解@FunctionalInterface,所以可以使用lambda表达式
2.接口的默认方法和静态方法
接口拥有默认方法,默认方法允许在不打破现有继承体系的基础上改进接口(可以实现,也可以不去实现)。该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()、parallelStream()、forEach()和removeIf()
3.Optional
Optional目的是解决空指针,并且可以链式编程让代码更整洁
4.Streams
将集合或数组作为流处理
遍历 forEach() peek() 区别在于:forEach()流结束,peek()返回一个新的流
list.forEach(System.out::print);
list.peek(e -> System.out.println("Filtered value: " + e)).map(String::toUpperCase).collect(Collectors.toList());
过滤 filter
Stream<T> filter(Predicate<? super T> predicate);
流映射 map flatMap(流经过处理变为新的流)
缩减 reduce (聚合操作)