Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。

  1. 增加单个参数构造方法,可为null

Stream.ofNullable(null).count(); // 0

  1. 增加 takeWhile 和 dropWhile 方法

Stream.of(1, 2, 3, 2, 1)

.takeWhile(n -> n < 3)

.collect(Collectors.toList()); // [1, 2]

从开始计算,当 n < 3 时就截止。

Stream.of(1, 2, 3, 2, 1)

.dropWhile(n -> n < 3)

.collect(Collectors.toList()); // [3, 2, 1]

这个和上面的相反,一旦 n < 3 不成立就开始计算。

3)iterate重载

这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

举个例子:

import java.util.stream.Stream;

import org.junit.Test;

/**
* 流的处理
* 1) 创建流
* 2) 中间操作
* 3) 终止操作
*/ public class StreamTest { @Test
public void test3() {
// 流的迭代, 创建流
Stream<Integer> stream1 = Stream.iterate(1, t -> (2 * t) + 1);
stream1.limit(10).forEach(System.out::println); System.out.println("*************************");
// 有限的迭代
Stream<Integer> stream2 = Stream.iterate(1, t -> t < 1000, t -> (2 * t) + 1);
stream2.forEach(System.out::println);
} @Test
public void test2() {
Stream<Integer> stream1 = Stream.of(3, 9, 20, 22, 40, 7);
// 新方法, takeWhile, dropWhile
// 从流中一直获取判定器为真的元素, 一旦遇到元素为假, 就终止处理.
Stream<Integer> stream2 = stream1.takeWhile(t -> t % 2 != 0);
stream2.forEach(System.out::println); System.out.println("**********************");
stream1 = Stream.of(3, 9, 20, 22, 40, 7);
Stream<Integer> stream3 = stream1.dropWhile(t -> t % 2 != 0);
stream3.forEach(System.out::println); } @Test
public void test1() {
Stream<Integer> stream1 = Stream.of(3, 9, 20, 22, 40);
//stream1.forEach(t -> System.out.println(t));
stream1.forEach(System.out::println); System.out.println("***********************************"); Stream<Object> stream2 = Stream.of(); // 流中没有数据
stream2.forEach(System.out::println); System.out.println("***********************************"); // 传入null会被解析为是一个数组对象, 会进一步访问它的长度信息
//Stream<Object> stream3 = Stream.of(null);
//stream3.forEach(System.out::println); // 可以传入 一个null来创建流对象
Stream<Object> stream3 = Stream.ofNullable(null);
stream3.forEach(System.out::println);
}
}

java 11 Stream 加强的更多相关文章

  1. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  2. Java 8 Stream API Example Tutorial

    Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...

  3. Java笔记:Java 流(Stream)、文件(File)和IO

    更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...

  4. Java 11 已发布,String 还能这样玩!

    在文章<Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码>中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来 ...

  5. Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

    美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. 可以看出 Java 8 扩 ...

  6. Java 11 这 8 个逆天新特性教你写出更牛逼的代码!

    美国时间2018年 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. 可以看出 Jav ...

  7. Java 11 Tutorial

    Java 11 Tutorial 参考 https://blog.csdn.net/sihai12345/article/details/82889827 原文 https://winterbe.co ...

  8. java.util.stream 库简介

    Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...

  9. Java - 17 Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...

随机推荐

  1. 从0开始的Python学习003序列

    sequence 序列 序列是一组有顺序数据的集合.不知道怎么说明更贴切,因为python的创建变量是不用定义类型,所以在序列中(因为有序我先把它看作是一个有序数组)的元素也不会被类型限制. 序列可以 ...

  2. python粗谈面向对象(二)

    浅谈super() super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,产生了一个super对象:Python的多继承类是通过mro的方式来保证 ...

  3. 【原】Java学习笔记006 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:写一万次&q ...

  4. Zabbix常见触发器表达式

    Zabbix trigger是zabbix 进行告警通知的设定条件 ,当监控获取的值触发了设定的条件时,会按照触发器的设定,执行相应的action 操作 .在zabbix中为了比较方便的设定各种条件, ...

  5. CSS---选择器种类 | 层叠性权重

    一.css选择器种类 1.1,ID选择器 1.2,类选择器 1.3,标签选择器 1.4,后代选择器 1.5,子代选择器 1.6,交集选择器 1.7,并集选择器 1.8,通配符选择器 1.9,属性选择器 ...

  6. consul 搭建

    windows 1. 下载consul https://www.consul.io/downloads.html 2. 解压至consul_1.4.2 3.配置环境变量 path下新增D:\work\ ...

  7. 使用Dapper.Contrib 开发.net core程序,兼容多种数据库

    关于Dapper的介绍,我想很多人都对它有一定的了解,这个类似一个轻型的ORM框架是目前应用非常火的一个东西,据说各方面的性能都不错,而且可以支持多种数据库,在开始介绍这个文章之前,我花了不少功夫来学 ...

  8. python 枚举Enum

    常量是任何一门语言中都会使用的一种变量类型 如 要表示星期常量,我们可能会直接定义一组变量 JAN = 1 TWO = 2 ... 然后在返回给前端的时候,我们返回的就会是1,2,...这种魔法数字, ...

  9. 【Beta阶段】展示博客

    Beta阶段展示博客 blog software buaa 1.团队成员简介 Email:qianlxc@126.com Free time:8:00 7:00 a.m ~ 11:00 12:00p. ...

  10. PS绘制飘逸彩色丝带教程

    一.新建一个大小适当的图像,点击工具栏上的钢笔工具,使用形状图层来绘制出下图的形状. 二.把形状所在层的填充设为0%,填充设成0是不会影响到图层的,不像不透明度那样会影响图层样式的效果. 三.双击丝带 ...