1. Stream流
1.1. Stream流引入
Stream流完全不是I/O流,按照流水线处理方式来考虑代码中的思想。
JDK1.8 之后,我们拥有了Lambda表达式,让代码的中心偏向解决实际问题,直到重点,可以提高效率。
Stream流中使用了大量Lambda表达式,利用Lambda操作方式,提供开发效率
1.2 获取Stream流
java.util.stream.Stream<T> JDK1.8的新特征
1. 所有的Collection<T>集合都有对应的Stream();
2. 可以通过Stream类中的static Stream of()获取
static Stream<T> of(T... t);
static Stream<T> of(T t);
1.3 Stream常用方法
延迟方法:
返回值类型依然是Stream接口本身,并没有影响我们操作真正的资源
允许链式操作,
例如
filter(XXX).limit(XXX).sorted(XXX).
终结方法:
返回值类型不是Stream接口本身,要么处理数据,要么返回其他类型数据,并且不再支持Stream流对象链式操作,count,foreach
1.3.1 foreach方法【终结方法】
void foreach(Consumer<? super T> action);
1.3.2 filter方法
Stream<T> filter(Predicate<? super T> condition);
1.3.3 map方法
<R> Stream<R> map(Function<? super T, ? super R> fun);
1.3.4 count方法【终结方法】
long count();
1.3.5 limit方法
Stream<T> limit(long maxSize);
1.3.6 skip方法
Stream<T> skip(long n);
1.3.7 concat方法
static Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
2. 方法引用
2.1 方法引用小要求
1. 明确对象
对象 ==> 调用者
类对象,类名,super,this,构造方法,数组构造方法
2. 明确的执行方法
该方法只有名字不需要显式出现参数
3. 需要处理的数据
【联想,推导,省略】
4. :: 方法引用格式
2.2 通过类对象来执行方法引用
1. 明确对象
类对象
2. 明确执行的方法
自定义
3. 处理的数据
简单要求为String类型