Stream流

文章介绍了Java8中的Stream流,包括其简化数据操作的作用,结合Lambda表达式的功能,以及流的获取(从集合和数组)、中间操作、终结操作和收集方法。通过示例代码展示了如何使用Stream流处理集合和数组,并强调了Stream的链式编程特性和一次性使用原则。
摘要由CSDN通过智能技术生成

一、Stream流的概述

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

2.Stream流的作用是什么,结合了什么技术:

简化集合、数组操作的API。结合了Lambda表达式。

3.Stream流式思想的核心:

(1)先得到集合或者数组的Stream流(就是一根传送带)

(2)把元素放上去,然后就用这个Stream流简化的API来方便的操作元素。

(3)对操作后的Stream流进行收集

4.Stream流的三类方法:

  • 获取Stream流:创建一条流水线,并把数据放到流水线上准备进行操作

  • 中间方法:流水线上的操作。一次操作完毕之后,还可以继续进行其他操作

  • 终结方法:一个Stream流只能有一个终结方法,是流水线上的最后一个操作

二、Stream流的获取

Stream操作集合或者数组的第一步是先得到Stream流,然后才能使用流的功能。

  1. 集合获取Stream流的方式

可以使用Collection接口中的默认方法stream​()生成流,

但是Map集合不能直接调用默认方法stream()生成流

  1. 数组获取Stream流的方式:

  1. 代码示例:

//Stream流的获取代码示例
public static void main(String[] args) {

    /** -----------------Collection集合获取流--------------------------- */
    Collection<String> List = new ArrayList<>();
    Stream<String> s = list. stream();

     /** ------------------Map集合获取流-------------------------------- */
    Map<String,Integer> maps = new HashMap<>();
    //键流
    Stream<String> keyStream = maps.keySet().stream();
    //值流
    Stream<Integer> valueStream = maps.values().stream();
    //键值对流(拿整体)
    Stream<Map.Entry<String, Integer>> keyAndValueStream = maps.entrySet().stream();

     /** -------------------数组获取流---------------------------------- */
    String[] names = {"张三","李四","王五","赵六"};
    Stream<String> nameStream = Arrays.stream(names);
    Stream<String> nameStream2 = Stream.of(names);

三、Stream流的常用API(中间操作方法)

注意:

  • 中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程

  • 在Stream流中无法直接修改集合、数组中的数据。(会得到一个新的Stream流)

四、Stream流的常见终结操作方法

注意:终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream了。

中间方法会返回Stream流,所以支持链式调用,而终结方法无返回流

五、收集Stream流

注意:一个Stream流只能使用一次,终结操作后就消失了

1.收集Stream流的含义:(Stream流 —> 数组/集合 )

  1. 就是把Stream流操作后的结果数据转回到集合或者数组中去。

2.收集Stream流的作用:

  1. Stream流是方便操作集合/数组的手段

  1. 操作的结果数据最终要恢复到集合或者数组中去,集合/数组才是开发中的目的。

3.Stream流的收集方法

4.Collectors工具类提供了具体的收集方式

5.代码示例

//将集合转为stream流,并筛选除首字母为“张”的元素
Stream<String> s2 = List.stream().filter(s ->s.startswith("张"));
//注意注意:流只能使用一次
//(1)将stream流转换为List集合
List<String> zhangList = s2. collect( Collectors. toList());
//(2)将stream流转换为Set集合
Set<String> zhangSet = s2. collect( Collectors. toSet());
//(3)将stream流转换为数组
object[] arrs = s2.toArray();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值