常见的Stream流生成
时间:2022-07-22
本文章向大家介绍常见的Stream流生成,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
常见的Stream流生成
数组
String[] strArrays = {"hello","hhh","lalala"};
Stream<String> strStream = Stream.of(strArrays);
// 也可以直接食用
Stream<Integer> integerStream = Stream.of(10, 11, 12);
List集合
List<String> list = new ArrayList<>();
Stream<String> listStream = list.stream();
Set集合
Set<String> set = new HashSet<>();
Stream<String> setStream = set.stream();
Map集合
Map<String,String> map = new HashMap<>();
Stream<String> keyStream = map.keySet().stream();
Stream<String> valuesStream = map.values().stream();
// 或者
Stream<Map.Entry<String, String>> stream = map.entrySet().stream();
常见的Stream方法
先事先准备一个数组,做测试用。
List<String> list = new ArrayList<>();
list.add("钟先生");
list.add("钟太太");
list.add("钟老");
list.add("张老板");
list.add("张总");
filter
用于对流中的数据进行过滤(注意:是把你需要的内容过滤出来)
需求1. 把list集合中以张开头的元素在控制台输出
list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);
需求2. 把长度为3的输出
list.stream().filter(s -> s.length() == 3).forEach(System.out::println);
需求3. 把集合中以张开头且长度为3的元素输出
list.stream()
.filter(s -> s.startsWith("张"))
.filter(s -> s.length() == 3)
.forEach(System.out::println);
limit
返回此流中的元素组成的流,截取前指定参数个数的数据
需求1. 取前3个数据在控制台输出
list.stream().limit(3).forEach(System.out::println);
skip
跳过指定参数个数的数据,返回由该流的剩下元素组成的流
需求1. 跳过前3个元素,把剩下的输出
list.stream().skip(3).forEach(System.out::println);
需求2. 跳过2个元素,把剩下的元素中前2个输出
list.stream().skip(2).limit(2).forEach(System.out::println);
concat
合并两个流成为一个新的流,静态方法,调用时应该是Stream.concat()
需求:取前4个数据组成一个流,跳过2个数组组成一个流,将两个流合并
Stream<String> s1 = list.stream().limit(4);
Stream<String> s2 = list.stream().skip(2);
Stream.concat(s1,s2).forEach(System.out::println);
distinct
消除重复数据
需求:上面合并后的流中元素不重复
Stream.concat(s1,s2).distinct().forEach(System.out::println);
sorted
需求1:按照字母顺序把数据输出
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("dc");
list.add("da");
list.stream().sorted().forEach(System.out::println);
}
count
统计数量
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("dc");
list.add("da");
long count = list.stream().count();
System.out.println(count);
}
Stream流收集
收集到List集合
List<String> list = new ArrayList<>();
list.add("钟先生");
list.add("钟太太");
list.add("钟老");
list.add("张老板");
list.add("张总");
Stream<String> stream = list.stream().filter(s -> s.startsWith("钟"));
List<String> collect = stream.collect(Collectors.toList());
收集到Set集合
Set<String> set = new HashSet<>();
set.add("钟先生");
set.add("钟太太");
set.add("钟老");
set.add("张老板");
set.add("张总");
Stream<String> stream = set.stream().filter(s -> s.length() == 2);
Set<String> collect = stream.collect(Collectors.toSet());
收集到Map
下面的代码根据需求来写,有些复杂,可能需要你仔细阅读一下代码才能看懂.
// 该数组表示(名字,分数)
String[] strings = {"乐心湖,100", "张小王,90", "王小湖,66"};
// 得到分数大于70的家伙
Stream<String> stream = Stream.of(strings).
filter(s -> Integer.parseInt(s.split(",")[1]) > 70);
//使用stream流操作完毕的数据收集到Map集合中并遍历,姓名为key,年龄为value
Map<String, Integer> map = stream.collect(Collectors.toMap(
s -> s.split(",")[0],
s -> Integer.parseInt(s.split(",")[1]))
);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey()+": "+entry.getValue());
}
- PHP 安全与性能
- Linux 系统与数据库安全
- 运维必备技能 WEB 日志分析
- Elasticsearch 一键安装含中文分词
- Session 的 Cookie 域处理(多域名虚拟主机)
- ElasticSearch + Logstash + Kibana 日志采集
- ElasticSearch + Logstash + Kibana 一键安装
- Oracle 表空间管理
- 数据加密字段加密
- 《Netkiller Virtualization 手札》Docker 卷管理
- PHP高级编程之守护进程
- Spring boot with Docker
- Spring boot with Service
- Spring boot with PostgreSQL
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php微信公众号开发之简答题
- php5.x禁用eval的操作方法
- php微信公众号开发之图片回复
- php微信公众号开发之答题连闯三关
- swoole_process实现进程池的方法示例
- golang实现php里的serialize()和unserialize()序列和反序列方法详解
- keras 实现轻量级网络ShuffleNet教程
- Python应用实现处理excel数据过程解析
- Python实现爬取并分析电商评论
- python中怎么表示空值
- Keras自动下载的数据集/模型存放位置介绍
- Keras 切换后端方式(Theano和TensorFlow)
- python 字符串的驻留机制及优缺点
- php微信公众号开发之翻页查询
- php 中phar包的使用教程详解