有关java的Stream流介绍与使用

Stream流介绍

一. 什么是Stream流

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

Stream可以由数组或集合创建,对流的操作分为两种:

  1. 中间操作,每次返回一个新的流,可以有多个。
  2. 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。

Stream特性

  1. stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
  2. stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
  3. stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

二. 常用方法

1. 将集合转化为Stream流

// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);

// 将集合转化为Stream流
Stream<Integer> stream = list.stream();

2. collect --> 将Stream流转化为指定类型

转化为列表 --> collect(Collectors.toList()
// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);
// 将集合转化为Stream流
Stream<Integer> stream = list.stream();
// 将Stream转化为List
List<Integer> streamList = stream.collect(Collectors.toList());
转化为Set --> collect(Collectors.toSet()
// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);
// 将集合转化为Stream流
Stream<Integer> stream = list.stream();
// 将Stream转化为Set
Set<Integer> streamSet = stream.collect(Collectors.toSet());
转化为Map --> collect(Collectors.toMap()
// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);
// 将集合转化为Stream流
Stream<Integer> stream = list.stream();
// 将Stream转化为Map
Map<Integer, Integer> streamMap = stream.collect(Collectors.toMap(item -> item, item2 -> item2 * 2, (item, item2) -> item + item2));
  1. 键映射函数(Key Mapper Function)

    item -> item
    
    • 类型Function<? super T, ? extends K>,其中T是流中元素的类型,K是Map键的类型。
    • 用法:这个函数用于从流中的每个元素生成Map的键。在你的例子中,它简单地将流中的每个元素(假设为Integer类型)直接用作Map的键。
  2. 值映射函数(Value Mapper Function)

    item2 -> item2 * 2
    
    • 类型Function<? super T, ? extends V>,其中T是流中元素的类型,V是Map值的类型。
    • 用法:这个函数用于从流中的每个元素生成Map的值。在你的例子中,它将流中的每个元素(假设为Integer类型)乘以2,并将结果作为Map的值。
  3. 合并函数(Merge Function)

    (item, item2) -> item + item2
    
    • 类型BinaryOperator<V>,其中V是Map值的类型。
    • 用法:这个函数用于解决键冲突。如果两个或多个流元素通过键映射函数映射到同一个键上,那么这些元素的值(通过值映射函数生成)就需要被合并成一个值。合并函数接受两个值(这里是itemitem2),并返回它们的合并结果。在你的例子中,如果两个元素映射到同一个键上,它们的值(即原始值的两倍)将被相加。

3. filter 过滤元素

// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);
// 将集合转化为Stream流
Stream<Integer> stream = list.stream();
// 过滤
Stream<Integer> streamFilter = stream.filter(item -> item > 4); // {6,6}

4. map --> 将一个Stream流转化为另一个Stream流

// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);
// 将集合转化为Stream流
Stream<Integer> stream = list.stream();
// map 将该Stream流转化为另一个Stream流
Stream<Object> MapStream = stream.map(item -> {
	item += 2;
	return item;
});

5. forEach --> 循环Stram流的每个元素

// Arrays.asList --> 创建指定值的集合
List<Integer> list = Arrays.asList(1, 6, 6);
// 将集合转化为Stream流
Stream<Integer> stream = list.stream();
// map 将该Stream流转化为另一个Stream流
Stream<Object> MapStream = stream.map(item -> {
    item += 2;
    return item;
});

MapStream.forEach(item-> System.out.println(item));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攒了一袋星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值