四时宝库

程序员的知识宝库

java基础知识2(java8常用Stream流操作)


概念:Stream是java8提出的一个新的概念,不是输入输出的Stream流,而是一种函数式编程方式在集合类上进行复杂的操作的工具,简言之就是,以内部迭代的方式处理集合数据的操作,内部迭代可以将更多的控制权交给集合类。Stream和Iterator的功能类似,只是Iterator是以外部的形式处理集合数据的操作。

在java8以前对集合操作需要写出处理过程,如在集合处理过程中筛选出满足条件的数据,需要一一遍历出集合每一元素,再逐一判断是否满足条件,满足条件的元素返回。而Stream只需要将作为接口的筛选条件作为参数传递进来,Stream会自行操作并将合适的元素同样以Stream形式返回,最后接收即可。

2种操作:

中间操作:中间操作的结果是刻画、描述一个Stream,并没有产生一个新集合,这种操作也叫惰性求值方法

终止操作:最终从Stream操作得到值

如果返回是Stream是中间操作,返回是其它值或空是终止操作

对粗糙工艺品(Stream数据源),进行颜色加工(最终得到结果),第一步:

筛选合适条件的原型(对应Stream中的Filter),第二步:对筛选出的原料进行上色(对应Stream中的map),第三步:上好色的工艺品取出(Stream的collect(toList()))。

取下工艺品之前的是中间操作,可以有多个或0个中间操作,但每个Stream数据源只有一个终止操作。

1、由Stream生成一个List列表,也可以用Collect(toSet)生成一个Set集合

String[] testStr = {"hello","hello1","hello2","hello3"}

List<String> list = Stream.of(testStr ).colletct(Collections.toList());

2、map中间操作

将一种类型的值映射为另一种类型,可以可以将Stream中的每个值映射为一个新值,最终转换作为一个新的Stream流

将Stream中每个字符串转为大写的形式

String[] testStr= {"hello","hello1","hello2","hello3"}

List <String> list = Stream.of(testStr ).map(test ->test.toUppercase()).collectioin(Collections.toList());

list.forEach(test ->System.out.println(test))

3、filter中间操作

遍历并筛选出满足条件的元素形成一个新的Stream流

筛选出以字母开头的元素个数,此例中的count方法也是终止操作计算Stream元素的个数

String[] testStr= {"hello","hello1","hello2","hello3"}

int count = Stream.of(testStr).filder(test ->test.startsWith("h")).count();

4、flatMap中间操作

可用Stream替换值,并将多个Stream流合成一个Stream流

Integer[] testStr= {1,2,3,4,5}

Integer[] testStr1= {6,7,8,9}

List<Integer> list = (List<Integer>)Stream.of(Arrays.asList(1,2,3,4,5),ArrayList.asList(6,7,8,9)).flatMap(test ->test.stream()).collect(Collections.toList());

5、max 、min终止操作

取出Stream中最长字符串

String[] testStr= {"helo","hello","h2","hel"}

Optional<String>max= Stream.of(testStr).max((p1,p2) -> Integer.compare(p1.length(),p2.length()));

6、reduce终止操作

从Stream中的一组数值生成另一个值

上述的max、min、count实际上都是reduce操作,求出Stream元素的总和

int sum = Stream.of(5,6,7).reduce(0,(accumulator,element)->accumulator+element);

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接