Java Stream流-看这一篇就够了

一、前提

什么是流?在用JDK1.8的你肯定知道我就不多bb了。本篇主要介绍一下内容:

  • 流的创建
  • 流的操作
  • 流的结束

听上去是不是很弟弟,别急,看完这篇,让你用流信手拈来。😎

二、流基本介绍

什么是流

  • JDK8提供的对集合数据进行处理的一种方式
  • 流中的元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算
  • 数据源流的来源。 可以是集合,数组,I/O channel, 产生器generator 等
  • 有聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等

流的特点

  • 一个流只能使用一次
  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style),这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)
  • 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代, Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现

串行流和并行流

顾名思义,串行流是一个个的执行,相当于单线程,并行流是并行执行,相当于多线程。

  • 创建串行流:stream()
  • 创建并行流:parallelStream()

根据实际测试,在数据量比较大的时候,并行流的速度快串行流1.5到3倍,看实际需求有所不同。

三、正文

好,前面都是对流一点都不知道的人说的废话,下面进入正文

1.各个容器类实现Stream的方式

本节覆盖了日常能用到的容器、数组、IO创建流的方式:

    @Test
    public void getStreamTest()
    {
   
        /**
         * {@code Collection}在JDK1.8版本实现了Stream()方法和parallelStream()方法,
         * 所有实现Collection的容器类通过调用stream()方法或者 parallelStream()
         */
        // list
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.stream();

        // Set
        Set<Integer> set = new HashSet<Integer>();
        set.add(1);
        set.add(2);
        set.add(3);
        set.stream();

        // ArrayList
        ArrayList<Integer> arrList = new ArrayList<>();
        arrList.add(1);
        arrList.add(2);
        arrList.stream();

        // Vector
        Vector<Integer> vector = new Vector<>();
        vector.add(1);
        vector.add(2);
        vector.stream();

        // Queue
        Queue<Integer> queue = new ArrayBlockingQueue<>(12);
        queue.add(1);
        queue.add(2);
        queue.stream();

        // Stack
        Stack<Integer> stack = new Stack<>();
        stack.add(1);
        stack.add(2);
        stack.stream();

        // Map 通过调用map的entrySet()方法,获取Set再调用stream()
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "a");
        map.put(2, 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值