java8 Stream的用法

本文介绍Java Stream API的基本用法及常见函数,如map、filter、flatMap等,通过实例展示如何利用Stream API对数据进行转换、筛选、排序等操作,实现数据处理的高效与简洁。

Stream用来将数据转换成我们想要的内容,比如说我有一个整形List,我想把它里面的每个元素在原来的基础上+1,这时用Stream就可以很容易的实现了:

        List<Integer> list=Arrays.asList(1,2,3);
        List<Integer> list1=list.stream().map(x ->x=x+1).collect(Collectors.toList());

常用的函数有map,filter,flatMap,sort,distinct,skip,limit,peek等
map:一个输入对应着一个输出。
filter:符合判断条件的才允许通过。
flatMap:和map类似,只不过这个是把输出的内容写回,而之前的map是生成一个新的数据源。
sort:排序。
distinct:去重。
limit:保留前多少个。
skip:跳过前多少个。
peek:个人理解好像跟动态代理似的,有个增强的功能?这个我还不太懂。

Stream主要是用lambda表达式来简化代码的书写,这里的x->x=x+1就是lambda表达式了,我之前每次看到这个都发懵,因为之前也没接触过->这个符号,但是后来用多了发现也没啥,说下我对这个表达式的理解吧,从左往右,第一个x,就像是形式参数一样,用于代指右侧的表达式,也可以写成y,z,apple等;接下来是->这个符号,他就是一个固定的符号,用于把左右分开;这个符号右边,就是表达式,在这里由于用的是map方法,所以要写一个赋值表达式,比如说x=x*x+1等等,如果使用的是filter的话表达式要写一个判断表达式,比如说x!=null&&x>=2,只有符合判断条件的才允许通过。

我们可以把这些功能函数想象成可以组装的净水器,净水器分了很多层,有石子,沙子,明矾等等,每一层都可以过滤水里不同的脏东西,许多层组合在一起构成了一个完整的净水器。这个也是,每一个函数就是一个随意拆卸组装的工具管道,多个管道组装到一起,数据通过后就变成了我们想要的数据了,比如说如下的例子:

 List<Integer> list= Arrays.asList(24,35,48,62,79,754);
        List<Integer> list1=list.stream().limit(5).skip(1).sorted(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        }).distinct().map(x->x=x+1).collect(Collectors.toList());
        list1.forEach(x->System.out.println(x));

我对数据先取了前五个,然后去掉第一个,按大小排序,去重,每个元素+1,输出后打印。小伙伴们可以猜一下这个小例子的输出结果是什么。

### Java 8 Stream API 使用教程和示例 Java 8 引入了 Stream API,这是一个用于处理集合数据的强大工具。它提供了一种简洁、高效且易于并行化的方式来处理数据流,从而极大地简化了编写代码的复杂性[^2]。Stream API 的核心功能包括数据过滤、排序、转换及汇总等操作,支持链式调用,使开发者可以写出更简洁、更高效、更易于维护的代码[^4]。 以下是一个具体的使用示例,展示如何利用 Stream API 进行数据处理: ```java import java.util.*; import java.util.stream.*; public class StreamExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 链式操作:筛选偶数并将其加倍,最后收集到列表中 List<Integer> result = numbers.stream() .filter(n -> n % 2 == 0) // 筛选偶数 .map(n -> n * 2) // 将偶数加倍 .collect(Collectors.toList()); // 收集到列表 System.out.println(result); // 输出: [4, 8, 12, 16, 20] } } ``` 在这个示例中,`filter` 方法用于筛选流中符合条件的元素(即偶数),`map` 方法用于转换流中的每个元素(将偶数加倍),而 `collect` 方法则用于将流处理的结果收集到集合中[^5]。 #### Stream API 的基本概念 Stream API 的工作流程可以分为三个阶段: 1. **创建流**:从集合、数组或其他数据源创建一个流。 2. **中间操作**:对流进行一系列转换操作(如 `filter` 和 `map`),这些操作会返回一个新的流。 3. **终端操作**:执行流的计算并生成结果(如 `collect` 或 `forEach`)[^3]。 #### 常见的操作方法 - **`filter`**:筛选符合条件的元素。 - **`map`**:将流中的每个元素映射为另一个元素。 - **`sorted`**:对流中的元素进行排序。 - **`distinct`**:去除流中的重复元素。 - **`limit`**:限制流的大小。 - **`skip`**:跳过指定数量的元素。 - **`collect`**:将流的结果收集到集合中。 - **`forEach`**:遍历流中的每个元素[^4]。 通过结合这些操作方法,开发者可以轻松实现复杂的数据处理逻辑。 ### 注意事项 在使用 Stream API 时需要注意以下几点: - 流是不可变的,所有操作都会返回一个新的流。 - 中间操作不会触发实际的计算,只有当终端操作被调用时,流才会开始执行操作。 - 流只能被消费一次,一旦执行了终端操作,流就会关闭[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值