Java Stream流的使用
流相关的方法可以分为三种类型,分别是:获取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流的使用的更多相关文章
- 一文带你入门Java Stream流,太强了
两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...
- 全面吃透JAVA Stream流操作,让代码更加的优雅
全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...
- Java Stream 流如何进行合并操作
1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...
- Java Stream 流(JDK 8 新特性)
什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 S ...
- Java | Stream流、泛型、多线程 | 整理自用
1.lambda 表达式 lambda 的延迟执行 可以对程序进行优化,尤其是使用 if {} else {} 条件判断,先判断条件是否成立,再传入计算好的参数. functionName( para ...
- 深度掌握 Java Stream 流操作,让你的代码高出一个逼格!
概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream 的操作符大体上分为两种:中间操作符和终止操作符 中 ...
- Java Stream流排序null以及获取指定条数数据
Java8的Stream流的一些用法, //排序 carerVehEntityList = carerVehEntityList.stream().sorted( Comparator.compari ...
- Java Stream简介, 流的基本概念
在Javaor .net编程中, 我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是St ...
- Java Stream 自定义Collector
Collector的使用 使用Java Stream流操作数据时,经常会用到各种Collector收集器来进行数据收集. 这里便深入了解一点去了解Collector的工作原理和如何自定义Collect ...
随机推荐
- Java-文件File简单实用
1.1java.io.File File用于表示文件系统中的一个文件或目录 通过File可以: 1:访问该文件或目录的属性信息(名字,大小,修改时间等) file.getName();获取文件名 fi ...
- 【JDBC】学习路径2-编写第一个JDBC程序
第一章:导入jar包 在未安装MySQL数据库的请务必安装,安装教程:[MySQL]从入门到掌握2-下载安装 connector/J下载地址:https://dev.mysql.com/downloa ...
- 第七十五篇:Vue兄弟组件传值
好家伙, 兄弟组件的传值用到Eventbus组件, 1.EventBus的使用步骤 ① 创建 eventBus.js 模块,并向外共享一个Vue的实例对象 ②在数据发送方, 调用bus.$emit(' ...
- Merge Into 语法支持
KINGBASE 兼容Oracle 语法,实现了merge into 的功能.以下以例子的形式,介绍merge into语法的使用.以下例子在V8R6 ,且 database_mode=oracle ...
- Jmeter中的JSON提取器用法
一.使用前提 一般来说JSON提取器只适用于响应结果中返回的是json数据 二.需求 在下一个接口调用上一个接口的数据,如:请求1返回的结果,处理以后作为请求2的参数使用. 首先需要下载JSON Ex ...
- flink-cdc同步mysql数据到hbase
本文首发于我的个人博客网站 等待下一个秋-Flink 什么是CDC? CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的 ...
- Windows Server Backup保留副本数量的问题
在配置Windows Server Backup的时候可以配置备份时间点和备份存放位置,但是无法配置保留备份的数量.作为微软提供的一个基本的备份工具,做简单的备份还是可以的.但是对于同一备份任务,反复 ...
- 《Java Web程序设计——开发环境搭建》
Java Web程序设计--开发环境搭建 一.JDK下载.安装以及环境变量的配置: 官网:https://www.oracle.com/java/technologies/download ...
- 示例:Service连接应用程序
整体思路: 1.创建pod 2.创建关联上一步pod的service 3.使用不同的方式配置service从而能够在集群内部访问 4.使用ssl方式加密访问service 5.配置service为no ...
- MongoDB一主一副本一仲裁搭建步骤
mkdir -p /opt/mongo/replica_sets/myrs_27017/log & mkdir -p /opt/mongo/replica_sets/myrs_27017/da ...