Java8-Stream

Stream基本知识

  • Stream流的来源。可以是集合数组,I/O channel, 产生器generator 等
  • 进行的操作:聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted
  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
  • 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

主要用法如上文:forEach,map,filter,limit,sorted,Collectors,summaryStatistics,都是些通用方法

其实就是将集合和数组的数据转化成Stream,再做处理,最后封装成原数据(集合和数组)

map方法给人的感觉就是进行一种自定义运算操作,如下代码

使用代码:

package com.sun.test;

import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class Java8Stream {

    public static void main(String[] args) {
        //关于集合和数组的Stream操作
        System.out.println("关于集合和数组的Stream操作");
        List<String> sw = Arrays.asList("bb","cc","","dd","","ee","aa");
        List<String> se = sw.stream().filter(s->!s.isEmpty()).collect(Collectors.toList());
        List<String> sd = sw.stream().filter(s->!s.isEmpty()).sorted(String::compareToIgnoreCase).
                collect(Collectors.toList());
        System.out.println(sw);
        System.out.println(se);
        System.out.println(sd);
        sw.stream().filter(s->!s.isEmpty()).sorted(String::compareToIgnoreCase).
        collect(Collectors.toList()).forEach(System.out::println);


        //Random的Stream操作
        System.out.println("Random的Stream操作");
        Random ran = new Random();
        //limit限制随机数个数
        ran.ints().limit(10).forEach(System.out::println);//ints获取整形Stream

        //map方法使用
        System.out.println("map方法使用");
        //先是去除空值,排序,用map进行操作,返回list值,循环打印输出
        sw.stream().filter(x->!x.isEmpty()).sorted().map(x->x+"o").
        collect(Collectors.toList()).forEach(System.out::println);

        //原始sw值
        //并没有影响原始sw值
        System.out.println("原始sw值");
        System.out.println(sw);


    }

}

输出结果:
关于集合和数组的Stream操作
[bb, cc, , dd, , ee, aa]
[bb, cc, dd, ee, aa]
[aa, bb, cc, dd, ee]
aa
bb
cc
dd
ee
Random的Stream操作
-1974603326
672975278
-803250443
-858191439
332004765
-1926746164
-968358665
1470637115
-733990614
598957685
map方法使用
aao
bbo
cco
ddo
eeo
原始sw值
[bb, cc, , dd, , ee, aa]
参考:http://www.runoob.com/java/java8-streams.html

猜你喜欢

转载自blog.csdn.net/shuaishuai1234/article/details/81779867