1.什么是Lambda表达式?
Lambda表达式,即匿名(闭包)函数,因其基于数学中的λ演算得名;Java8中的新特性之一就是支持Lambda表达式,他支持简单的“函数式编程”。
2.基本语法(可以省略参数类型,支持类型推断)
i.(parameters) -> expression
ii.(parameters) -> statement
iii.(parameters) -> {statements}
3.Stream API
概念:
Java8对于元素集合给出的统一、快速、并行操作的一个方式;可以借助多核优势,以及配合Lambda表达式、链式结构对集合进行方便对操作,可以支持顺序和并行对元素操作的元素集合。
作用:
提供了一种操作大数据接口,让数据操作更容易和更快;使用stream,我们能够对collection的元素进行过滤、映射、排序、去重等许多操作。
中间方法和终点方法:
它具有过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法;“流”抽象天生就该是持续的,中间方法永远返回的是Stream,因此如果我们要获取最终结果的话, 必须使用终点操作才能收集流产生的最终结果。区分这两个方法是看他的返回值, 如果是Stream则是中间方法,否则是终点方法。
4.特性案例
>替换匿名类
传统方式 Lambda表达式>遍历集合
传统方式 Lambda表达式+forEach()>结合过滤器
通过调用集合对象stream()方法获得“流”,再调用“流”的filter()方法可以快速对元素进行过滤;
stream+lambda 过滤出‘J’为首字母的元素也可以通过Predicate定义过滤条件,结合stream来进行元素过滤;
predicate + stream + lambda进行集合元素过滤多个Predicate可以做级联进行与(and)和或(or)等;
predicate进行 and/or级联对集合元素进行过滤>Function接口:
Function<T,R>接受两个泛型,T为输入类型,R为输出结果类型;它接受一个T类型参数,通过定义的函数逻辑处理后,返回R类型结果;并且可以通过andThen(Function f)进行多个function的级联,借助apply(T t)方法可以将Function应用在参数上;
function + lambda>Stream.map()对集合元素一次进行操作:
传统方式 map() + lambda也可以map()结合Function来进行元素操作;
function + map() + lambda>Stream.reduce()对集合元素进行聚合:
传统方式 reduce() + lambda + get()聚合集合元素>sort()进行对集合进行排序:
结合compareTo()进行默认升序排序;
compareTo() + sort() + lambda实现Comparator接口来进行自定义排序(如倒序);
Comparator + sort() +lambda>结合Collectors进行集合处理:
过滤并收集集合元素,如以下过滤原List中元素长度大于2的字符串,并将元素收集到新的List中;
collect() + lambda + Collectors.toList()过滤并收集计算元素总数,如以下过滤元素长度大于2的字符串,并计算收集到的元素个数;
collect() + Collectors.counting() / count() + lambda过滤并收集,获得收集后集合的第一个元素;
findFirst() + get() + lambda过滤并通过distinct()进行去重后收集集合元素;
distinct() + collect() + Collectors.toList() + lambda>Stream.xxxMatch(Predicate p)进行元素匹配判断:
anyMatch()只要集合中任意一个元素符合就返回true;allMatch()需要集合中所有元素都符合才返回true;
stream() + anyMatch() + allMatch() + lambda>Collectors.joining(delimiter)进行元素拼接:
Collectors.joining()>XxxSummaryStatistics+Stream.mapToXxx()进行元素统计分析:
可以获得集合元素最大值、最小值、平均值、总个数、总和;
mapToInt() + summaryStatistics() + getMax()/getMin()/getSum()/getAverage()/getCount()案例代码:
https://github.com/Vekaco/Java8Features
参考文献:
http://baijiahao.baidu.com/s?id=1589645410830300902&wfr=spider&for=pc
网友评论