资源说明: Java 8 中使用 Stream 遍历 Map
Java 8 中引入了 Stream 概念, Stream 是一种非常强大的功能,可以使我们更加简单的操作 Map 对象。Map 是 Java 中非常常用的一个集合类型,我们通常也需要去遍历 Map 去获取某些值。那么,我们怎么在 Map 中使用 Stream 呢?
基本概念
Map 有 key,value,还有表示 key,value 整体的 Entry。创建一个 Map:`Map someMap = new HashMap<>();`
获取 Map 的 EntrySet
获取 Map 的 entrySet:`Set> entries = someMap.entrySet();`
获取 Map 的 key
获取 Map 的 key:`Set keySet = someMap.keySet();`
获取 Map 的 value
获取 Map 的 value:`Collection values = someMap.values();`
使用 Stream 遍历 Map
我们可以通过其他几个 Stream 来遍历 Map。使用 Stream 获取 Map 的 key,我们先给 Map 添加几个值:
```java
someMap.put("jack","20");
someMap.put("bill","35");
```
如果我们想查找 age=20 的 key,则可以这样做:
```java
Optional optionalName = someMap.entrySet().stream()
.filter(e -> "20".equals(e.getValue()))
.map(Map.Entry::getKey)
.findFirst();
log.info(optionalName.get());
```
因为返回的是 Optional,如果值不存在的情况下,我们也可以处理:
```java
optionalName = someMap.entrySet().stream()
.filter(e -> "Non ages".equals(e.getValue()))
.map(Map.Entry::getKey).findFirst();
log.info("{}",optionalName.isPresent());
```
如果有多个值,我们可以这样写:
```java
someMap.put("alice","20");
List listnames = someMap.entrySet().stream()
.filter(e -> e.getValue().equals("20"))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
log.info("{}",listnames);
```
使用 Stream 获取 Map 的 value
上面我们获取的 Map 的 key,同样的我们也可以获取 Map 的 value:
```java
List listAges = someMap.entrySet().stream()
.filter(e -> e.getKey().equals("alice"))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
log.info("{}",listAges);
```
总结
Stream 是一种非常强大的功能,通过和 Map 相结合,我们可以更加简单的操作 Map 对象。这个例子展示了如何在 Java 8 中使用 Stream 遍历 Map,希望对大家的学习有所帮助。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。