stream流中从map取数据报空指针
时间: 2024-11-03 12:16:46 浏览: 17
在Java的Stream API中,如果你尝试从`Map`中通过`stream()`获取数据并过滤或映射,可能会遇到空指针异常,通常是当你试图访问一个不存在的键时。这是因为`Map`不像数组那样有默认值,如果某个键不存在于映射中,`get(key)`会返回`null`。
例如:
```java
Map<String, Integer> map = new HashMap<>();
Optional<Integer> value = map.stream()
.filter(map::containsKey) // 或者 map.keySet().stream()
.map(map::get)
.findFirst(); // 如果map中没有key对应的数据,value将为null
if (!value.isPresent()) {
System.out.println("Key not found in the map");
}
```
在这个例子中,如果`map`中没有对应的`String`键,`map.get(key)`将会抛出`NullPointerException`。
为了避免这种情况,你需要先检查键是否存在,或者使用`orElse`, `orElseGet`, 或者其他提供默认值的方法:
```java
Optional<Integer> value = map.get(key).orElse(0); // 使用默认值替代空
```
或者使用`orElseThrow`来抛出异常:
```java
Integer value = map.get(key).orElseThrow(() -> new NoSuchElementException("Key not found"));
```
阅读全文