JAVA8新特性之 Stream API

重要的 Stream API  : java.util.Stream.*

Stream提供了一种高效且简易处理数据的方式

注意:1.Stream自己不会存储元素

2.对Stream进行操作不会改变数据源,相反,会产生一个执有结果的新Stream

3.Stream操作是延迟执行的。只有进行了终止操作才会产生结果

(并行流就是把内容分成多个数据块,并用不同的线程分别处理每个数据块。在Java8 后,Stream API可以声明性的通过parallel()与sequential()在并行流与串行流(顺序流)之间进行切换

一、Stream操作的三个步骤:1.创建Stream   通过一个数据源(集合或数组)获取一个流。(有五种方法)

            2.中间操作      一个中间操作链,对数据进行处理

3.终止操作(终端操作)   一个终止操作,执行中间操作连,并产生结果

(中间操作不会执行任何处理,而在终止操作时一次性全部处理,称为“惰性操作”)

二、创建Stream:

1、用Collection提供的成员方法: Stream<T>   stream   返回一个的是串行流

Stream<T>   parallelStream   返回一个并行流

2、用Arrays的静态方法:  Arrays.stream()

3、使用静态方法: Stream.of()

4、使用静态方法创建无限流:  Stream.iterate()   或        Stream.generate()

三、中间操作

1、筛选与切片       fileter   (Predicate p) 接受Lambda,从流中过滤某些元素

distinct() 通过流所生成元素的hashCode()和equals()去除重复元素

limit(long maxSize)  截断流,使其元素不超过给定数量

skip(long n) 返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n)互补。

2、映射        map(Function f) 接收一个函数作为参数,该函数会被应用到每个元素,并映射成新的元素

mapToDouble(ToDoubleFunction f)    接收一个函数作为参数,该函数会被应用到每个元素,并产生一个新的DoubleStream

mapToInt(ToIntFunction f)  接收一个函数作为参数,该函数会被应用到每个元素,并产生一个新的Integer

3、排序    sort()  按自然顺序排序(字典顺序),产生一个新流

sorted(Comparator  c)  按照比较器排序,产生一个新流

四、终止操作:  会从流的流水线中产生结果,其结果可以任何不是流的值

1、查找与匹配        allMatch(Predicate p) 检查是否匹配所有元素

anyMatch(Predicate p) 检查是否至少匹配一个元素

noneMatch(Predicate p) 检查是否没有匹配的元素

findFirst()返回第一个元素

findAny()  返回任意当前流中的元素

count() 返回流中数据的元素个数

max(Comparator c)返回流中最大的值

min(Comparator   c)返回流中最小的值

forEach(Consumer   c) 内部迭代(使用Collection接口需要用户去做迭代,称为外部迭代。相反,Stream API 使用内部迭代----它帮你把迭代做了)

2、归纳        reduce(T  iden , BinaryOperator  b)  可以将流中元素反复结合起来,得到一个值,返回T

reduce(BianaryOperator b)可以将流中元素反复结合起来,得到一个值。返回

Optional<T>

(备注:map和reduce的连接通常称为map-reduce模式,因Google用它来进行网络搜索而出名)

3、收集

collect(Collector   c)    将流转化为其他形式,接受一个Collector接口的实现,用于给Stream中的元素做汇总

(   Collector 接口中方法的实现决定了如何对流执行收集操作(如收

集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态
方法,可以方便地创建常见收集器实例 。  )

原文地址:https://www.cnblogs.com/OwenL-Y/p/10016400.html

时间: 2024-11-07 23:02:09

JAVA8新特性之 Stream API的相关文章

java8新特性(Stream API)

Stream API的操作步骤: 1.创建Stream 2.中间操作 3.终止操作(终端操作) //1. 创建 Stream @Test public void test1(){ //1. Collection 提供了两个方法 stream() 与 parallelStream() List<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); //获取一个顺序流 Stream&

乐字节-Java8新特性-接口默认方法之Stream流(下)

接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 筛选和切片 filter(T -> boolean):保留 boolean 为 true 的元素 limit(long n):返回前 n 个元素 skip(long n):去除前 n 个元素 distinct():去除重复元素,这个方法是通过类的 equals 方法来判断两个元素是否相等的 映射 map

Java8 新特性之集合操作Stream

Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同. stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作. 为什么要使用Stream 函数式编程带来的好处尤为明显.这种代码更多地表达了业务逻辑的意图,而不是它的实现机制.易读的代码也易于维护.更可靠.更不容易出错. 高端 使用实例: 测试数据:

Java8 新特性 Stream 无状态中间操作

无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 filter 映射 map 扁夹化 flatMap 遍厉 peek 过滤 filter 接收一个谓词断言,boolean Pridicate< T > 根据返回值类型来确定是否过滤这一条属性. // 过滤 filter @Test public void filterTest() { list.stre

Java8 新特性 Stream 短路终端操作

短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 noneMatch 查找首个 findFirst 查找任意 findAny 匹配所有 allMatch //匹配所有 allMatch @Test public void allMatchTest() { boolean b = list.stream() //所有的商品价格都大于40 .allMatch(

Java8 新特性 Stream 非短路终端操作

非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大值 max 最小值 min 聚合 collect 计数 count 遍厉 forEach //遍厉 forEach @Test public void forEachTest() { list.stream() .forEach(iter -> //以json格式输出 System.out.prin

Java8新特性浅析

欢迎阅读我编写的Java 8介绍.本教程将带领你一步一步地认识这门语言的新特性.通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解.看完这篇教程后,你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等. 允许在接口中有默认方法实现 Java 8 允许我们使用default关键字,为接口声明添加非抽象的方法实现.这个特性又被称为扩展方法.下面是我们的第一个例子: 1 2 3 4 5 6 7 interfac

Java8新特性分享

原文地址:http://www.importnew.com/19345.html |放在下面防止网站挂了..做个备份 1.简介 毫无疑问,Java 8是自Java  5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器.类库.开发工具和JVM(Java虚拟机).在这篇教程中我们将会学习这些新特性,并通过真实例子演示说明它们适用的场景. 本教程由下面几部分组成,它们分别涉及到Java平台某一特定方面的内容: 语言 编译器 类库 开发工具 运行时(Jav

Java 8 新特性:Java 类库的新特性之 Stream类 ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  Java 类库的新特性之 Stream类 (注:此文中涉及到的一部分图片为网络图片,若有问题,请联系我将其删除.) 一.Java8对IO/NIO 的改进 Java 8 对 IO/NIO 也做了一些改进,主要包括: 改进了java.nio.charset.Charset 的实现,使编码和解码的效率得以提升: 精简了jre/lib