怎么在java 8的map中使用stream
2023-04-18 13:06:34 时间
怎么在java 8的map中使用stream
简介
Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用Stream呢?
基本概念
Map有key,value还有表示key,value整体的Entry。
创建一个Map:
Map<String, String> someMap = new HashMap<>();
获取Map的entrySet:
Set<Map.Entry<String, String>> entries = someMap.entrySet();
获取map的key:
Set<String> keySet = someMap.keySet();
获取map的value:
Collection<String> values = someMap.values();
上面我们可以看到有这样几个集合:Map,Set,Collection。
除了Map没有stream,其他两个都有stream方法:
Stream<Map.Entry<String, String>> entriesStream = entries.stream();
Stream<String> valuesStream = values.stream();
Stream<String> keysStream = keySet.stream();
我们可以通过其他几个stream来遍历map。
使用Stream获取map的key
我们先给map添加几个值:
someMap.put("jack","20");
someMap.put("bill","35");
上面我们添加了name和age字段。
如果我们想查找age=20的key,则可以这样做:
Optional<String> optionalName = someMap.entrySet().stream()
.filter(e -> "20".equals(e.getValue()))
.map(Map.Entry::getKey)
.findFirst();
log.info(optionalName.get());
因为返回的是Optional,如果值不存在的情况下,我们也可以处理:
optionalName = someMap.entrySet().stream()
.filter(e -> "Non ages".equals(e.getValue()))
.map(Map.Entry::getKey).findFirst();
log.info("{}",optionalName.isPresent());
上面的例子我们通过调用isPresent来判断age是否存在。
如果有多个值,我们可以这样写:
someMap.put("alice","20");
List<String> listnames = someMap.entrySet().stream()
.filter(e -> e.getValue().equals("20"))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
log.info("{}",listnames);
上面我们调用了collect(Collectors.toList())将值转成了List。
使用stream获取map的value
上面我们获取的map的key,同样的我们也可以获取map的value:
List<String> listAges = someMap.entrySet().stream()
.filter(e -> e.getKey().equals("alice"))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
log.info("{}",listAges);
上面我们匹配了key值是alice的value。
总结
Stream是一个非常强大的功能,通过和map相结合,我们可以更加简单的操作map对象。
本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-formap
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
相关文章
- 七月与安生观后感—告别我的27岁
- 《看见》读后感:跟柴静一起成长,追求独立与真相
- 【整理】一个真实的图灵:如迷的解谜者,并非万事成谜
- 关于我 — About Me
- 《这样说就对了》读书笔记
- LOMA280保险原理读书笔记
- 《人人都该买保险》读书笔记
- 自己动手写一个简单的MVC框架(第二版)
- 操作系统核心原理-7.设备管理:I/O原理
- 操作系统核心原理-6.外存管理(下)文件系统
- 操作系统核心原理-5.内存管理(下):段式内存管理
- 操作系统核心原理-5.内存管理(中):分页内存管理
- 告别学生生涯,进入社会模式—2015总结,2016规划
- 在DOS中将DOS行结束符转换为Linux行结束符,反之亦然
- 操作系统核心原理-5.内存管理(上):基本内存管理
- 如何检索我的进程的已保存的用户ID?
- Scrum Guide - Scrum指南中文版
- 在UNIX目录下与每个文件的循环调用弹簧批处理程序作为参数
- 操作系统核心原理-4.线程原理(下):死锁基础原理
- 操作系统核心原理-4.线程原理(上):线程基础与线程同步