java中的Stream学习
streamapi是用来处理数据,处理集合等容器中的数据,处理操作有:查询、筛选、删除、过滤、统计、映射等。
希望能够用类似于sql语法的形式对java内存中的数据进行处理。
stream的特点:
(1)stream本身不负责存储数据,存储数据是用集合,数组等数据结构。
(2)stream是不可变,一旦修改,就会产生新的stream对象。stream不会修改数据源的数据。
(3)stream的操作是一个延迟操作。所有的操作都必须延迟到终结操作时,一起处理。
stream的操作分为三步:
(1)创建stream流,创建共有四种方式:
①使用connection集合创建,connection集合的stream()方法。
②使用arrays工具类和数组进行创建,arrays.stream(array).
③stream的of方法创建一个有限流,stream.of(t...values)。
④stream的generate、iterate方法方法创建无限流,stream.generate(supplier<t> s),stream.iterate(t seed, unaryoperator<t> f)
(2)对流中的数据进行处理(加工),方法:
①filter(predicate p):过滤
②distinct():去重
③limit(long maxsize):取有限的几个
④skip(long n):跳过n个
⑤peek(consumer action) 接收lambda表达式,对流中的每个数据执行lambda体操作
⑥sorted():排序,按照自然排序
sorted(comparator com):排序,按照定制排序
⑦map(function f):接收lambda表达式,对流中的每个数据,执行lambda体操作,返回新的数据构成新的流
⑧flatmap(function f)
map(function<? super t,? extends r> mapper) map操作流中的把t对象变成r对象,由r对象构成新的流
flatmap(function<? super t,? extends stream<? extends r>> mapper)
flatmap把流中的数据t对象压扁变成一个stream,然后把一个个的stream最后再合成一个大的stream
(3)对流的结果进行收集(终结),一旦进行终结,不能再对此流进行操作,方法:
①void foreach(consumer ):遍历流中的数据
②long count():统计个数
③boolean allmatch(predicate p):是否全部满足xx条件
boolean anymatch(predicate p):是否有一个满足xx条件
boolean nonematch(predicate p):是否全部都不满足xx条件
④ optional<t> findfirst():返回第一个
optional<t> findany():返回任意一个
⑤optional<t> max(comparator c):找出最大的
optional<t> min(comparator c) :找出最小的
⑥t reduce(t iden, binaryoperator b) 通过反复的运算,留下最后一个结果
optional<u> reduce(binaryoperator b)
⑦r collect(collector c):把流中的数据最后都收集到一起
collector接口
biconsumer 抽象方法 void accept(r r,t t)
流创建示例:
1、list<integer> list = arrays.aslist(1,2,3,4,5); =》stream<integer> stream = list.stream();
2、int[] arr = {1,2,3,4,5};=》intstream stream = arrays.stream(arr);
3、stream<integer> stream = stream.of(1,2,3,4,5);
4、stream<double> steream = stream.generate(() -> math.random());//0~1的小数无限流 stream<integer> stream = stream.iterate(1, num -> num+=2);//奇数无限流
流的操作示例:
stream = stream.filter(t -> t%2==0); //等等方法的操作
流结果收集:
stream.foreach(system.out::println);//...等等
上一篇: 切开的菠萝可以放多久?菠萝的种类有哪些?
下一篇: 获取滚动的头部距离和左边距离