java 8 Stream(流)

本文详细介绍了Java 8的Stream API,包括Stream的背景、生成流的方法、中间操作、终结操作以及收集操作。重点讲解了如何通过Stream进行数据过滤、排序、聚合等操作,展示了使用Stream提升代码效率和简洁性的优势。
摘要由CSDN通过智能技术生成

目录

 

引言

一、Stream背景概述

1、背景

2、概念

3、特性 

4、Stream流的思想

5、 Stream流的好处

 二、生成流

1、Collection体系集合生成

2、Map体系集合生成

3、数组生成

 三、Stream流中间操作方法

1、概念:

2、常见方法:

3、方法展示加拓展

4、常用方法代码展示

filter代码演示

limit&skip代码演示

concat&distinct代码演示

sorted代码演示

map&mapToInt代码演示

四、Stream流终结操作方法

1、概念:

2、常见方法

3、代码演示

 五、Stream流的收集操作

1、概念

2、常用方法

3、工具类Collectors提供了具体的收集方式

4、代码演示

六、ENGING


引言


欲练此功,必先自......

DUCK不必,咱们就事论事,知识先开^\_/^。

一、Stream背景概述


1、背景

java 8 新特性

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

+--------------------+       +------+   +------+   +---+   +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+       +------+   +------+   +---+   +-------+
List<Integer> transactionsIds = 
widgets.stream()
             .filter(b -> b.getColor() == RED)
             .sorted((x,y) -> x.getWeight() - y.getWeight())
             .mapToInt(Widget::getWeight)
             .sum();

2、概念

什么是Stream?

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。

Stream(流)是一个来自数据源的元素队列并支持聚合操作。

元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。

数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。

聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。

和以前的Collection操作不同, Stream操作还有两个基础的特征:

Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。

内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

3、特性 

stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。

stream不会改变数据源,通常情况下会产生一个新的集合或一个值。

stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

4、Stream流的思想

5、 Stream流的好处

  • 直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印

  • Stream流把真正的函数式编程风格引入到Java中

 二、生成流


生成Stream流的方式:

1、Collection体系集合

2、Map体系集合

3、数组

1、Collection体系集合生成

    使用默认方法stream()生成流, default Stream<E> stream()

//Collection体系的集合可以使用默认方法stream()生成流
        List<String> list = new ArrayList<String>();
        Stream<String> listStream = list.stream();

        Set<String> set = new HashSet<String>();
        Stream<String> setStream = set.stream();

2、Map体系集合生成

    把Map转成Set集合,间接的生成流 

//Map体系的集合间接的生成流
        Map<String,Integer> map = new HashMap<String, Integer>();
        Stream<String> keyStream = map.keySet().stream();
        Strea
  • 37
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 34
    评论
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值