jdk 编码效率提升较大的技能,对各集合处理的抽象化,可以进行复杂的过滤,查找,映射等等;
stream 数据流,不会储存任何元素,运行时延迟执行的:如果没有一个终止操作是不会运行的;
stream 运行的三个步骤:
1.创建一个数据流
2.一系列中间操作链,对流数据进行处理
3.终止操作产生一个结果

Java8-Stream API的使用与介绍
Stream 流的两种区别:
Collection.stream():一般用这种,单线程串联处理
Collection.parallelStream():在中间操作时是多线程并行操作(默认线程数等于电脑线程数进行),该操作在特定条件下效率比Stream高:在处理数据量超过几千万级以上,中间流操作超过3组时,需要考虑使用该方法会提高代码运行速度

获取Stream流的方式:
Stream.of(T…values)
IntStream.of(int…)
LongStream.of(Long…)
DoubleStream.of(Double…)
Collection.Stream()
Collection.parallelStream()
不常用(获取无限流):
Stream.iterate()
Stream.generate()

Stream流的中间操作方法:

筛选与切片:

fileter():过滤数据->接收lambda
distinct() :去除重复元素:判断对象使用的不多,一般用作去重基本数据类型int,Long,Double,String…
limit(long maxSize):截断流:同Sql的limit(1)
skip(long n):跳过元素:如不要前5个脚针的数据 skip(5L)

映射:

map(Function f) :作用到每个元素上接收一个新的数据,并形成一个新数据流如
list list=new Arraylist<>();
list.add(new xxx(“张三”,13))
list.add(new xxx(“李四”,14))
list.Stream().map(x-> x.getName())
这样就会形成一个新的string集合流

mapToDouble(ToDoubleFunction f):接收一个stream流,该方法作用到每个对象,最后新生成一个新的DoubleStream;
mapToInt(ToIntFunction f) :接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 IntStream。
mapToLong(ToLongFunction f):接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 LongStream。
flatMap(Function f) :接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流,该方法不太熟悉感觉应用场景应该不大…

排序:

sorted():产生一个新流,其中按自然顺序排序
sorted(Comparator comp): 产生一个新流,其中按比较器顺序排序,使用lambda实现

查找与匹配:

allMatch(Predicate p):检查该流中所有元素是否满足该条件
anyMatch(Predicate p):检查该流中只要一个元素满足该条件则返回true
noneMatch(Predicate p):检查是否没有匹配所有元素
findFirst() :返回第一个元素
findAny() :返回当前流中的任意元素
count():返回流中元素总数 同Sql中的 select count(*)
max(Comparator c) :返回流中最大的值 lambda 表达式 使用Comparator 可以手动实现
min(Comparator c) :返回流中最小的值 lambda 表达式 使用Comparator 可以手动实现
forEach(Consumer c) :内部迭代(使用 Collection 接口需要用户去做迭代,称为外部迭代。相反,Stream API 使用内部迭代——它帮你把迭代做了)

归约:

reduce(T iden, BinaryOperator b):可以将流中元素反复结合起来,得到一个值。返回 T,如 reduce(0,(x,y)->x+y),reduce(Integer::sum)

收集:

collect(Collector c):collect(Collector c) 将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法
如collect(Collector.toList() )

具体方法与实例如下表:
Java8-Stream API的使用与介绍

相关文章: