详解Java8的Stream数据流,更加优雅的解决方案
前言:目前Java8新特性在很多公司已经流行起来了,除非很老的公司还在用Java7,所以学习Java8是非常有必要的。
Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
简而言之StreamAPI提供了一种高效且易于使用的处理数据的方式。2、Stream流式思想概述
注意:Stream流和IO流没有任何关系,请暂时忘记对传统IO流的固有影响!Stream流思想类似于工厂车间的生产流水线,Stream流不是一种数据结构,不保存数据,而是对数据进行加工处理,Stream可以看作是流水线上的一个工序;在流水线上,通过多个工序让一个原材料加工成一个商品
lambda表达式对接口的要求:
虽然可以使用lambda表达式对某些接口进行简单的实现,但是并不是所有的接口都可以使用Lambda表达式来实现。要求接口中定义的必须要实现的抽象方法只能是一个。
四大内置函数
类型
类
抽象方法
消费型接口
Consumer
voidaccept(Tt)
供给型接口
Supplier
Tget();
函数型接口
FunctionT,R
Rapp1y(Tt)
断言型接口
Predicate
booleantest(Tt)2。1、流程1。第一步:把集合转换为流stream2。第二步:操作stream流stream流在管道中经过中间操作(intermediateoperation)的处理,最后由最终操作(terminal)operation得到前面处理的结果2。2、特点1。代码简洁:函数式编程编写出的代码简洁且意图明确,使用stream接口让你从此告别for循环
2。多核友好:Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下方法2。3、操作符
两种:中间操作符、终止操作符2。4、中操作符
流方法
示例
filter
用于通过设置的条件过滤出元素
dustinct
返回一个元素各异(根据流所生成元素的hashCode和equals方法实现)的流
limit
会返回一个不超过给定长度的流
skip
返回一个扔掉了前n个元素的流
map
接收一个函数作为参数。这个函数会被应用到每一个元素上,并将其映射成一个新的元素(使用映射一词,是因为他和转换类似,但其中的细微差别在于它是创建一个新版本而不是去修改)
flatMap
使用flatMap方法的效果是,各个数组并不是分别映射成一个流,而是映射成流的内容。所有使用map(Arrays::stream)时生成的单个流都被合并起来,即扁平化为一个流
sorted
返回排序后的流3、注意事项:
1。Stream只能操作一次2。Stream方法返的是新的流3。Stream不调用终结方法,中间的操作不会执行4、例子
Stream更加优雅的解决方案:publicstaticvoidmain(String〔〕args){定义一个list集合ListStringlistArrays。asList(123,1245,4643,748188,543637,12567788);1。获取所有带1的信息2。获取所有长度为4的信息list。stream()。filter(aa。indexOf(1)1)。filter(aa。length()4)。forEach(aSystem。out。println(a));System。out。println();list。stream()。filter(aa。indexOf(1)1)。filter(aa。length()4)。forEach(System。out::println);}
如今JDK17已于2021年9月份发布了,我相信还是很多公司没有提前去升级java版本,Java8依然是目前主流的版本,及时升级到最新版本,依然也是能够沿用Java8新特性的。