Stream流
Stream流可以看做流水线,把原始数据转换为流进行一系列加工,最后收集的过程,特点:
1 . 不是数据结构,不会保存数据。
2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。
3. 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。
常用的Stream流方法
名称 | 作用 | 方法种类 |
---|---|---|
limit | 截取指定个数 | 非终结方法 |
skip | 跳过指定个数 | 非终结方法 |
filter | 对流进行过滤 筛选 | 非终结方法 |
map | 对流进行映射处理 | 非终结方法 |
concat | 合并流 | 非终结方法 |
count | 统计个数 | 终结方法 |
foreach | 逐一处理 | 终结方法 |
limit
Stream<T> limit(long maxsize) //截取maxsize个元素
skip
Stream<T> skip(long n) //跳过n个元素
filter
Stream<T> filter(Predicate<? super T> predicate) //对元素进行过滤
map
<R> Stream<R> map(Function<? super T, ? extends R> mapper) //对每一个元素进行映射处理
concat
static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) //对每一个元素进行映射处理
count
long count();
foreach
void foreach(Consumer <? super T> action)
Stream收集方法
collect(Collectors.toList()); //收集至list,返回list
collect(Collectors.toSet()); //收集至set返回set
collect(Collectors.groupingBy(function)) //根据一定条件分组
函数式接口
该接口有且仅有一个必须被重写的方法,常用函数式接口实例
Predicate<T> boolean 判断者,接收参数 T,返回布尔值 filter(Predicate....)
Consumer<T> void 消费者 接收参数,但不返回值 foreach(Consumer....)
Function<T> R 修改者,接收T,返回R map(Function....)
Supplier<T> T 生产者 无参数,有返回
Runnable用于制造一个任务传给线程
Lambda表达式规则
1.使用lambda表达式一定要是接口,并且有且仅有一个必须重写的方法
2.必须具备上下文推断
省略规则
1.参数的类型可以省略
2.当有且仅有一个参数时,小括号可以省略
3.当只有一条语句时,无论有无返回值,大括号,return都可以省略