Java-Stream流

Stream流
java.util.stream.Stream<T>是Java 8新加入的最常用的流接口(非函数式接口)
关注的是做什么,而不是怎么做

"Stream(流)"是一个集合元素的函数模型
是流模型,不是集合,也不是数据结构,本身不存储任何元素

Stream基本特征:
1.Pipelining:   中间操作都会返回流对象本身
2.内部迭代:     以前集合遍历都是在外部使用Iterator或增强for迭代,而流可以直接调用遍历方法

使用流步骤:获取数据源->数据转换->执行操作获取想要的结果
每次转换原有Stream对象不变,返回一个新的Stream对象
获取流:
1.所有Collection都可以通过stream默认方法获取流:
    default Stream<E> stream();
2.Stream接口的静态方法of可以获得数组对应的流:
    static <T> Stream<T> of (T...values)
    参数是一个可变参数,可以传递数组
常用方法:
1.延迟方法:返回值仍是Stream接口自身类型的方法(因此支持链式调用)
filter    map     limit   skip    concat
2.终结方法:返回值不再是Stream接口自身类型的方法
forEach     count

Stream流属于管道流,只能被消费(使用)一次
链式调用中的Stream若已流转到下一个,则上一个stream已经使用完毕,不能再调用了
逐一处理:forEach
该方法接收一个Consumer接口函数,将每一个流元素交给该函数处理

void forEach(Consumer<? super T> action);

用来遍历处理流中的数据
函数式接口Consumer中抽象方法:void accept(T t)
过滤:filter
将一个流转化为另一个子集流

Stream<T> filter(Predicate<? super T> predicate);

对数据进行过滤,去除不符条件的数据
函数式接口Predicate中抽象方法:boolean test(T t)
映射:map
将流中的元素映射到另一个流中

<R> Stream<R> map(Function<? super T,? extends R> mapper);

将当前流中T类型的数据转换为另一种R类型的流
函数式接口Function中抽象方法:R apply(T t)
取用前几个:limit
Stream<T> limit(long maxSize);
参数是long型,若流中元素长度大于参数则进行截取,否则不进行操作
跳过前几个:skip
Stream<T> skip(long maxSize);
若流中元素长度大于n参数则跳过前n个,否则将得到一个长度为0的空流
组合:concat
static <T> Stream<T> concat(Stream<? extends T> a,Stream<? extends T> b)
将两个流合并为一个流
注意:此方法是静态方法,直接Steam.concat()调用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值