《Java 8 实战》学习笔记系列

定义

流是Java API的新成员,它允许你以声明性方式处理数据集合,可以把它看成遍历数据集的高级迭代器

示例

List<String> threeHighCaloricDishNames =
menu.stream()//从menu获得流
.filter(d -> d.getCalories() > 300)//选出高热量的菜
.map(Dish::getName)//获取菜名
.limit(3)//只选3个菜
.collect(toList());//将结果保存在新的list中返回

组成

1.元素序列

接口,访问特定数据源,如集合

2.源

提供数据,如集合、数组、IO资源

3.数据处理操作

filter、map、reduce、find、match、sort等

特点

1.流水线

很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个大的流水线

2.内部迭代

Collection是外部迭代

Stream是内部迭代

3.只能遍历消费一次

和迭代器类似,流只能遍历一次。遍历完之后,我们就说这个流已经被消费掉了。

stream 流操作

数据源

执行查询集合、数组、IO数据

中间操作

形成流水线

1.filter 谓词筛选,返回Stream,操作参数Predicate,T -> boolean

2.map 映射,返回Stream,操作参数Function<T,R>,T -> R

细分

2.1 map + Arrays.stream() 将每个数组分别转化为流

2.2 flatMap + Arrays.stream() 将多个数组分别转化为单个流

2.3 mapToIn,返回IntStream

3.limit 截断流,返回Stream

4.skip 跳过元素

5.sorted 可配合reversed,返回Stream,操作参数Comparator,(T, T) -> int

6.distinct 筛选各异的元素。可替换为在终端操作时,使用toSet()去除重复元素,返回Stream

7.range 范围

8.boxed 包装类

终端操作

生成结果

forEach 消费流中的每个元素并对其应用 Lambda。这一操作返回 void

count 返回流中元素的个数。这一操作返回 long

sum 求和

noneMatch 不匹配

collect 把流归约成一个集合,比如 List、 Map、Set 甚至是 Integer

groupingBy 分组

partitioningBy 分区,谓词返回bool

Collectors.toList() 转换

Collectors.counting() 可直接一起换成count

maxBy 最大值

summingInt 汇总

averagingInt 平均数

summarizingInt 返回一个IntSummaryStatistics对象

包括

count

sum

min

max

average

joining 连接字符串

reducing

查找和匹配

anyMatch 流中是否有一个元素匹配谓词

menu.stream().anyMatch(Dish::isVegetarian)

allMatch 流中是否全部元素匹配谓词

menu.stream().allMatch(d -> d.getCalories() < 1000)

noneMatch 流中是否没有元素匹配谓词

menu.stream().noneMatch(d -> d.getCalories() >= 1000)

findAny 找到结果时短路,立即结束

ifPresent 是否包含,如果包含可以执行代码块内容

findFirst 查找第一个

reduce 归约,例如计算求和累加、累乘、最大最小值等,代替for

并行流

parallel() 顺序流转换为并行流

parallelStream

Java8新特性之流stream的更多相关文章

  1. 功能:Java8新特性steam流

    Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...

  2. Java8 新特性之流式数据处理

    一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包含整数的 ...

  3. Java8 新特性之流式数据处理(转)

    转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...

  4. 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)

    1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...

  5. java8新特性学习:stream与lambda

    Streams api 对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect). 流的操作类型分为两种: Int ...

  6. java8新特性Lambda和Stream

    Java8出来已经4年,但还是有很多人用上了jdk8,但并没用到里面的新东西,那不就等于没用?jdk8有许多的新特性,详细可看下面脑图 我只讲两个最重要的特性Lambda和Stram,配合起来用可以极 ...

  7. java8新特性——并行流与顺序流

    在我们开发过程中,我们都知道想要提高程序效率,我们可以启用多线程去并行处理,而java8中对数据处理也提供了它得并行方法,今天就来简单学习一下java8中得并行流与顺序流. 并行流就是把一个内容分成多 ...

  8. Java8新特性探索之Stream接口

    一.为什么引入Stream流 流是一系列与特定存储机制无关的元素--实际上,流并没有"存储"之说.使用流,无需迭代集合中的元素,就可以从管道提取和操作元素.这些管道通常被组合在一起 ...

  9. Java8新特性之三:Stream API

    Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式.Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找.过滤.筛选等操作 ...

随机推荐

  1. C#中方法的静态和非静态

    在代码中,给方法加上static就成为了一个静态的方法,然而静态方法是隶属于类的,由类名点出来! 不给方法加static就是一个非静态方法,非静态的方法,是隶属于对象的,需要把类实例化之后,用对象名去 ...

  2. Android_适配器(adapter)之SimpleAdapter

    概述 SimpleAdapter是一种 简单的适配器,将静态数据映射到布局xml对应的视图上.它也是BaseAdapter的子类. SimpleAdapter数据映射的组件有3类(从官网api或Sim ...

  3. 盘点Mysql的登陆方式

    前置知识 我们想登陆到mysql中前提是肯定需要一个用户名和密码:比如 root root 在mysql中用户的信息会存放在 mysql数据库下的 user表中 可以 use mysql 然后sele ...

  4. 07 . Nginx常用模块及案例

    访问控制 用户访问控制 ngx_http_auth_basic_module 有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开,我们希望的是某些特定的客户端可以访问 ...

  5. 【MobileNet-V1】-2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications-论文阅读

    2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications Andrew H ...

  6. Alpha冲刺 —— 5.9

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.总 ...

  7. Rocket - diplomacy - LazyModule的实例化(补)

    https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  8. jchdl - GSL实例 - DLatch(D锁存器)

    https://mp.weixin.qq.com/s/c8kDgye50nKJR4tkC0RzVA D锁存器对电平敏感,当使能位使能时,输出Q跟随输入D的变化而变化.   ​​ 摘自康华光<电子 ...

  9. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  10. Java实现 LeetCode 707 设计链表(环形链表)

    707. 设计链表 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链 ...