流相关的方法可以分为三种类型,分别是:获取Stream流、中间方法、终结方法。中间方法会返回当前流,可以方便的进行链式调用。

流不可重复使用,否则会报错:

java.lang.IllegalStateException: stream has already been operated upon or closed

    // 获取流的方式
List<Integer> list = Arrays.asList(1, 2, 4, 5, 5, 6, 7, 0);
String [] strArr = new String[]{"aaa", "bbb", "aaa"}; Stream<Integer> stream = list.stream(); // 从列表获取流
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5); // 从可变参数获取流
Stream<String> arrStream = Stream.of(strArr); // 从数组获取流

常见的中间方法:

方法 用途
Stream<T> filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤。
Stream<T> limit(long maxSize) 获取前几个元素
Stream<T> skip(long n) 跳过前几个元素
Stream<T> distinct() 去除流中重复的元素。依赖(hashCode和equals方法)
static <T> Stream<T> concat(Stream a, Stream b) 合并a和b两个流为一个流(也会遍历流,不可执行两次)
Stream<T> sorted(Comparator<? super T> comparator) 对元素进行合并
Stream map(Function<? super T, ? extends R> mapper) 对每个元素进行处理
    // filter()
stream.filter(x -> x > 0).filter(x -> x < 5).forEach(System.out::println); // limit()
integerStream.limit(3).forEach(System.out::println); // skip()
integerStream.skip(3).forEach(System.out::println); // 去重
arrStream.distinct().forEach(System.out::println); // 可将不同类型的Stream拼接到一起,不能执行两次
Stream<? extends Serializable> concat1 = Stream.concat(stream, arrStream); // 将相同元素拼接到一起后,可以直接用一个类型接收
Stream<Integer> concat = Stream.concat(stream, integerStream); // 排序
stream.sorted((x, y)->x - y).forEach(System.out::println); // map()
List<Integer> collect = stream.map((Integer x) -> x * x).collect(Collectors.toList());

常见的收集函数:

| public static <T> Collector toList() | 把元素收集到List集合中 |

| <A> A[] toArray(IntFunction<A[]> generator) | 把元素收集到数组中 |

| public static <T> Collector toSet() | 把元素收集到Set集合中 |

| public static Collector toMap(Function keyMapper , Function valueMapper) | 把元素收集到Map集合中 |

    // 收集成List
List<Digit> collect = list.stream().map(Digit::new).collect(Collectors.toList()); // 收集成数组,两个方法等效,务必要转换成对应的数组类型。
Integer[] integers = list.stream().toArray(length -> new Integer[length]);
Integer[] digits = list.stream().toArray(Integer[]::new); // 务必要用对应的类型 // 转换成Set
Set<Integer> collect1 = list.stream().collect(Collectors.toSet()); Digit [] data = new Digit[]{
new Digit("aaa", 10),
new Digit("bbb", 20)
}; // 转换成 Map
Map<String, Integer> collect3 = Stream.of(data).collect(Collectors.toMap(Digit::getDesc, Digit::getValue));

Java Stream流的使用的更多相关文章

  1. 一文带你入门Java Stream流,太强了

    两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...

  2. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

  3. Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...

  4. Java Stream 流(JDK 8 新特性)

    什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 S ...

  5. Java | Stream流、泛型、多线程 | 整理自用

    1.lambda 表达式 lambda 的延迟执行 可以对程序进行优化,尤其是使用 if {} else {} 条件判断,先判断条件是否成立,再传入计算好的参数. functionName( para ...

  6. 深度掌握 Java Stream 流操作,让你的代码高出一个逼格!

    概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream 的操作符大体上分为两种:中间操作符和终止操作符 中 ...

  7. Java Stream流排序null以及获取指定条数数据

    Java8的Stream流的一些用法, //排序 carerVehEntityList = carerVehEntityList.stream().sorted( Comparator.compari ...

  8. Java Stream简介, 流的基本概念

    在Javaor .net编程中,  我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是St ...

  9. Java Stream 自定义Collector

    Collector的使用 使用Java Stream流操作数据时,经常会用到各种Collector收集器来进行数据收集. 这里便深入了解一点去了解Collector的工作原理和如何自定义Collect ...

随机推荐

  1. Go语言Tips

    时间日期格式化 time.Now().Format("2006-01-02") 原生DefaultServeMux支持restful路由 ref: https://towardsd ...

  2. RabbitMQ实现订单超时案例

    前言 人间清醒 目录 前言 业务场景 JUC(DelayQueue)方案 DelayQueue简介 JUC DelayQueue实现订单超时案例代码 案例代码 Redis Key过期事件方案 简介 R ...

  3. [CF1526F] Median Queries(交互 / 构造)

    题面 这是一道交互题. 有一个未知的长度为 N \tt N N 的排列 P \tt P P,已知 P 1 < P 2 \tt P_1 < P_2 P1​<P2​ . 每次询问格式为 ...

  4. Spring的俩大核心概念:IOC、AOP

    1.Spring 有两个核心部分: IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理   (2)Aop:面向切面,不修改源代码进行功能增强 2.Spring 特点 ...

  5. kafka详解(一)--kafka是什么及怎么用

    kafka是什么 在回答这个问题之前,我们需要先了解另一个东西--event streaming. 什么是event streaming 我觉得,event streaming 是一个动态的概念,它描 ...

  6. 关于使用docker volume挂载的注意事项

    Content 在用Docker进行持久化的存储的时候,有两种方式: 使用数据卷(volume) -v 容器绝对路径 或者 -v 已经创建的volume名称:容器绝对路径 2. 使用挂载点(共享宿主目 ...

  7. git revert总结

    git revert git revert 是一种创建一次新的commit 来回退某次或某几次commit的一种方式 命令 // 创建一个新的commit,这个commit会删除(下面)commit- ...

  8. dp-LIS LCS 模型

    最长上升子序列问题: https://www.cnblogs.com/sxq-study/p/12303589.html 一:两遍LIS问题 1:题目: 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为 ...

  9. 常用MySQL语句(持续更新)

    1. 客户端登录 在终端输入 mysql -u[用户名] -p[密码] 2. 数据库级别操作 // 创建数据库 create database [db name]; // 查看数据库列表 show d ...

  10. Typora如何配置gitee图床

    转载自:https://mp.weixin.qq.com/s/5dPLbr2vFgL18XKL1Y05Og 要求: 1.Typora需要升级到最新版 2.需要安装nodejs PicGo软件下载地址: ...