java-Stream流的常见方法
一 常见创建流的三种方式
//list集合创建流方式
new ArrayList<>().stream();
new HashSet<>().stream(); //map集合创建流方式, 原理同list
HashMap<Object, Object> map = new HashMap<>();
Stream<Object> stream2 = map.keySet().stream();
Stream<Object> stream3 = map.values().stream();
Stream<Map.Entry<Object, Object>> stream4 = map.entrySet().stream(); //数组创建流的方式(可变参数)
String[] arr = {"hello"};
Stream.of(arr);
解:map本身不可以直接创建流使用,但是可以单独拉出来当作list处理
二 stream 中间操作 filter 的使用(过滤操作,过滤后可能会减少数据)
List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//以"张"开头的控制台输出
list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);
//长度为3的在控制台输出
list.stream().filter(s->s.length() == 3).forEach(System.out::println);
//以"张"开头的并长度为3的在控制台输出
list.stream().filter(s->s.startsWith("张")).filter(s->s.length() == 3).forEach(System.out::println);
"System.out::println" 这种格式的叫方法引用同 "s->System.out.println(s)"
解:filter 是过滤数据,看是否否和条件返回布尔值,过滤过后数据会减少 , map 是最终返回一个结果,所以数据量上面不会变化,但有可能数据会发生改变
三 Stream 常见的中间操作limit & skip
List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌"); //取前三个数据在控制台输出
list.stream().limit(3).forEach(System.out::println);
//跳过三个元素把剩余的元素的控制台输出
list.stream().skip(3).forEach(System.out::println);
//跳过两个元素,把剩下的元素中前两个元素在控制台输出
list.stream().skip(2).limit(2).forEach(System.out::println);
解:limit 是截取数据操作,skip 是跳跃数据操作。 对应括号填写相应的数
四 Stream 常见中间操作 concat & distanct
List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌"); //取前4个组成一个流
Stream<String> limit = list.stream().limit(4);
//跳过两个数据组成一个流
Stream<String> skip = list.stream().skip(2);
//合并需求1和2流,并把结果在控制台输出
Stream.concat(limit,skip).forEach(System.out::println);
//合并需求1和2流,并把结果在控制台输出要求不能重复
Stream.concat(limit,skip).distinct().forEach(System.out::println);
解:concat 是合并操作,这里将两个流合并起来并输出(两个流互不影响), distinct 是数据去重操作。
五 Stream 常见中间操作 sorted
List<String> list = new ArrayList<>();
list.add("lingqingxia");
list.add("zhangmanyux");
list.add("wangzuxianx");
list.add("liuyan");
list.add("zhangmin");
list.add("zhangwuji"); //按照字母顺序排序在控制台输出
list.stream().sorted().forEach(System.out::println);
//按照字符串长度,然后按照字母顺序在控制台输出
list.stream().sorted((s1,s2)->{
int num = s1.length() - s2.length();
return num == 0 ? s1.compareTo(s2) : num;
}).forEach(System.out::println);
解:sorted 排序操作,默认按字典顺序排序
六 Stream 常见中间操作 Map(过滤后数据不会减少 可能修改了某些内容)
List<String> list = new ArrayList<>();
list.add("01");
list.add("10");
list.add("20");
list.add("30");
list.add("40");
list.add("50"); //对字符进行数据转换
list.stream().map(Integer::parseInt).forEach(System.out::println);
//mapToInt 不仅有map属性还带有特殊方法,求和求平均数等操作
list.stream().mapToInt(s->Integer.parseInt(s)).forEach(System.out::println);
//mapToInt 转换int并求和
int sum = list.stream().mapToInt(Integer::parseInt).sum();
System.out.println(sum);
解:map处理数据并不会影响最后数据的总量
七 Stream 终结操作 foreach & count
List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//把集合中的元素在控制台输出控制台上
list.stream().forEach(System.out::println);
//把集合中的元素数量输出到控制台上
long count = list.stream().count();
System.out.println(count);
解: foreach 遍历循环操作,count 数量聚合操作
八 Stream 收集操作collection list
List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//生成流
Stream<String> listStream = list.stream().filter(s -> s.length() == 3);
//生成新的集合
List<String> stringList = listStream.collect(Collectors.toList());
Collections.toList() 变成list集合
Collections.toSet() 变成set集合
九 Stream 收集操作collection map
String[] arr = {"林青霞,33","张曼玉,28","柳岩,22"};
Map<String, String> maps = Stream.of(arr).collect(Collectors.toMap(s -> s.split(",")[0], s1 -> s1.split(",")[1]));
for (Map.Entry<String, String> entry : maps.entrySet()) {
System.out.println("姓名:"+entry.getKey()+",年龄"+entry.getValue());
}
Collections.toMap(k,v)
java-Stream流的常见方法的更多相关文章
- Java Stream流的使用
流相关的方法可以分为三种类型,分别是:获取Stream流.中间方法.终结方法.中间方法会返回当前流,可以方便的进行链式调用. 流不可重复使用,否则会报错: java.lang.IllegalState ...
- 一文带你入门Java Stream流,太强了
两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...
- 全面吃透JAVA Stream流操作,让代码更加的优雅
全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...
- java字符流操作flush()方法及其注意事项
java字符流操作flush()方法及其注意事项 flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...
- 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 的操作符大体上分为两种:中间操作符和终止操作符 中 ...
- 这么简单,还不会使用java8 stream流的map()方法吗?
一.前言 在日常的开发工作中经常碰到要处理list中数据的问题,比如从数据库中查出了很多学生,由于一些原因需要在内存中找出这些学生中的所有姓名,或者把名为"王五"的语文成绩暂时修改 ...
- Java Stream流排序null以及获取指定条数数据
Java8的Stream流的一些用法, //排序 carerVehEntityList = carerVehEntityList.stream().sorted( Comparator.compari ...
随机推荐
- Listen 1音乐播放器
Listen 1 Listen 1可以搜索和播放来自网易云音乐,QQ音乐,酷狗音乐,酷我音乐,Bilibili,咪咕音乐网站的歌曲,让你的曲库更全面.还支持歌单功能,你可以方便的播放,收藏和创建自己的 ...
- P31_全局配置 - window - 设置上拉触底的距离
window 设置上拉触底的距离 概念:上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为. 设置步骤: app.json -> window -> 为 o ...
- 【多线程与高并发】- synchronized锁的认知
synchronized锁的认知 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目录 s ...
- concurrent-map 和 sync.Map,我该选择哪个?
concurrent-map 和 sync.Map,我该选择哪个? 官方的map并不是线程安全的,如果我们在多线程中并发对一个map进行读写操作,是会引发panic的.解决方案除了使用锁来对map进行 ...
- AKS for Gitpod
------实习期间做的一个小项目 距今一个多月两个月----------------- 1.First Week local k8s 命令行:kubectl 运行Kubernetes: kind,m ...
- JAVA排序的方法
//冒泡排序法: package fuxi;public class Bubble { public static void main(String[] args) { int a ...
- gmlib密码算法库
gmlib密码算法库 一.gmlib密码算法库简介 支持国密 SM4/AES-ECB/CBC/GCM,SM3,SM2签名/加密,ZUC算法 的密码库,文档页面GMLib Docs ,项目地址 gmli ...
- WPF项目需要不断更新前台图片时,碰到“System.IO.IOException: 文件“xxx”正由另一进程使用“问题的解决
问题描述 项目中要求能不断拍照并更新显示图片,使用FileStream在本地创建了图片文件: 当下次重新拍照前删除之前拍过的图片时,提示"System.IO.IOException: 文件& ...
- 前端有关请求的相关内容axios
在请求头中常见的类型有 类型一 查看消息体 此时的请求拦截器中不需要对数据( 对象的形式 ) 进行修饰,默认会将数据修复为json的格式 类型二,当我们使用qs库对数据进行转换后(qs库的存在旨在是将 ...
- CSS:盒子_每个元素都有两个盒子(《CSS世界》笔记-块级元素)
CSS:盒子_每个元素都有两个盒子(<CSS世界笔记>-块级元素) 1)CSS世界只有"块级盒子(block-level box)"和"内联盒子(inline ...