stream 这玩意出来之后估计复杂sql要下岗了

本文详细介绍了Java 8中的Stream API,它极大地简化了集合操作,如过滤、去重、排序和分组等,使得编程风格更加简洁。Stream API包括中间操作(如filter、distinct、sorted等)和结束操作(如forEach、count、min、max等)。通过Stream API,开发者可以实现类似SQL的操作,但更加面向对象,提高了代码的可读性和效率。文中还探讨了Stream的串行和并行执行、线程安全以及效率问题。
摘要由CSDN通过智能技术生成

jdk8 真是颠覆的一个版本。除了搞了lamoda还有函数式接口以及方法引用这些好用的新玩意之外。还搞了一个stream。这个stream可不是之前什么文件stream iostream。这个stream我现在的理解主要是针对集合操作的。java里头哪些算集合。数组。
list set map tree这些都算集合。说白了只要是多个的都算集合。在stream出来之前。基本我们操作这些数据结构。基本是要自己深入到每个细节。比如数组。你要指定数组的下标。然后或者这个元素再转变或者其他的。list map。要遍历还要iterator之类的。但是这些个注意细节的部分其实并不是我们关心。说白了。大家只是想要的结果就是。给一个集合。然后说出目的。然后拿到想要的结果。这个结果可能还是一个集合。或者就是一个简单的个类。

说到目的。常用的比如有过滤。去重。有排序。有分组。看到没有是不是跟所谓的sql操作很像。ok。既然明白了stream的用途。我们一步一步来看stream怎么用。在用之前要解答一个问题。这个是类还是接口。看源码。知道原来是一个接口。
在这里插入图片描述
关键还是从更base的stream过来的。而且basestream从形式上就是一个我们刚才聊的输入一个stream。再出来一个stream这种形式。这里不去细究basestream。知道stream是接口就行。

第一种创建流
Stream.of方法 。
在这里插入图片描述
当然这个过程相当复杂。不去看里头的实现细节了。

第二种就是从集合类过来,比如Arrays新加了这个方法。但是细究源码基本也都是从StreamSupport这个类的包装使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然这个类背后的方法可是相当复杂的。这个设计模式为了让我们用的简单而已。掌握一个原则就是你要想处理集合。先从集合生成stream类。

拿到了stream之后。我们能做哪些操作呢。一个一个来。这些方法基本都是很接地气的方法。当然也分类。网上别人都说什么中间操作。结束操作。还有什么Short-circuiting 看的晕晕乎乎的名字。其实就看结果的类型。结果类型还是stream就是所谓的中间操作。非stream就是所谓的结束操作。一般来说。拿到结束操作才是我们的目的。所以总结归纳stream写出来就是 三步走

生成流 1—n个 中间操作 再最后一个结束操作。 这里需要注意的是中间操作并不是真实开始。真实开始都是在终端操作。而中间操作用lazy这个词比较贴切。这跟我们平时写代码一个方法结束之后再执行下一个方法是不同的。要注意。下面我们一个一个来看看方法的作用。这里不讲原理。只讲语义。先讲中间操作

  1. filter 很明显是一个中间操作。入参是Predicate 函数式接口。 从语义上就是执行一个判断过程。如果为true。这个元素还留在stream的集合里头。
    在这里插入图片描述
    2.distinct 。没有入参的中间操作。语义就是去重后新stream集合
    在这里插入图片描述
    3.sorted. 从语义上就是排序。这里有两个sorted。一个是没有入参的。也就是原有集合默认的排序方法。一个是把排序过程穿进去的。
    在这里插入图片描述
    4.peek。从语义上就是纯消费。类似于遍历一次这个集合中的元素。入参就是遍历的过程。返回结果还是原来的stream。这里就引发了一个概念。就是stream中的元素只能用一次的。用完了就没了。所以才有了peek这个函数。有时候你可能需要在中间过程中看看中间结果。用这个peek方法来打印集合中的打印点东西或者干点啥事是最适合的。
    在这里插入图片描述
    5.limit 。从语义上来说就是返回集合中前几个元素的组成新stream
    在这里插入图片描述
    6.skip。 从语义上就是忽略前几个元素剩下的组成新stream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值