标签:结束 代码 开始 遍历 col span 静态 无法 产生
lambda表达式:
Runnable run = () -> { //逻辑代码 };
归根结底,lambda表达式就是一个类似于匿名内部类的语法糖,只不过不会像匿名内部类一样制造一个新的内存空间;这个表达式一般是用于函数式编程的,把方法当作参数,传给另一方法,主要关注点在参数列表和返回值里,
所以产生了一下几种用法:
1. () -> {}; 当此方法无参数时使用
2.x -> {}; 当此方法有一个参数时使用
3.(x1,x2,x3) -> {}; 当此方法有多个参数时使用
Java开发人员认为如果就这样使用lambda太过浪费了,于是产生了四大函数式编程接口(只有一个方法的接口):
1.Consumer<T> : void accept(T t); 消费型函数接口,参数列表为传入一泛型,无返回值.
2.Supplier<T>: T get(); 供给型函数接口,参数列表为空,返回值为一泛型;
3.Function<T,R>: R apply(T t),操作型函数接口,参数列表为一泛型,返回值为另一泛型;
4.Predicate<T>: boolean test<T t>,断言型函接口,参数列表为一泛型,返回值为布尔值;
总的来说,使用lambda表达式要对函数式的返回值和参数列表要有充分的了解,以及什么时候能用
方法的引用:
类::静态方法
类::实例方法
类::new
对象::实例方法
引用也是另一形态的语法糖,进行了方法的另一种调用,可以调用静态方法和实例方法和构造方法
Stream 为Java8新加入的API 为一些集合操作提供了更大的便利
操作类型分为 Intermediate / Terminal / Short-circuiting
i.惰化操作,将一堆数据进行某种程度上的数据过滤或者映射然后赋给一个新的流,主要目的是打开流,一个流后面可以跟0-n个惰化操作
ii.真正的使用流的操作,可以认为在一个流进行了Terminal后,这段流才真正的开始被遍历,然后这段流就结束了被使用光了,无法再被操作,所以Terminal一般都放在对流操作的最后一步操作
iii.对一个Intermediate完成后的类,进行限制,如limit() 把这个流截断,用于把一个太长的流进行限制,或者对一个在进行Terminal操作的流限制它操作的时间
流的使用: 简单来说就是进行 filter-map-reduce 操作后 制造出一个结果或者副作用(side effect)
1.流的创建:
Stream.of()
集合.stream()
Stream.iterator()
Stream.generate()
2.流的中间操作:
filter()
boxed()
limit()
sorted()
distinct()
3.流的终止操作:
collect()
标签:结束 代码 开始 遍历 col span 静态 无法 产生
原文地址:https://www.cnblogs.com/Lzzycola/p/13512138.html