如何创建一个包含可选的 hashmap 并在检索它时给我值或 Optional.empty 但有限制
How to create a hashmap that contains optional and when retreiving it gives me the value or Optional.empty but there are restrictions
How to create a hashmap that contains optional and when retreiving it gives me the value or Optional.empty? However, I am not allowed to check for null, Optional.empty() or use isPresent()
, isEmpty()
, get()
.
对于 Optional<V> get
,.get()
会给我空值或可选值,但我想要的是 Optional.empty()
或可选值,因为稍后我需要将这些可选值链接在一起。
例如,.get("John").flatMap(x -> x.get("ModName")).flatMap(x -> x.get("TestName")).map(Assessment::getGrade)
。
如果“John”在第一个映射中不存在,那么 .get("John")
会给我一个空值,如果我使用 .flatMap(x -> x.get("ModName"))
,我会得到一个空指针异常。
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
class CustomMap<V> {
private final Map<String, Optional<V>> map;
public CustomMap() {
map = new HashMap<String, Optional<V>>();
}
public Optional<V> get(String key) {
return map.get(key);
}
public int size() {
return map.size();
}
public CustomMap<V> put(V item) {
map.put(item.getKey(), Optional.ofNullable(item));
return this;
}
您可以在 get 方法中写一个检查,如下所示:
public Optional<V> get(String key) {
if (map.contains(key)) {
return map.get(key);
} else {
return Optional.empty();
}
}
How to create a hashmap that contains optional and when retreiving it gives me the value or Optional.empty? However, I am not allowed to check for null, Optional.empty() or use
isPresent()
,isEmpty()
,get()
.
对于 Optional<V> get
,.get()
会给我空值或可选值,但我想要的是 Optional.empty()
或可选值,因为稍后我需要将这些可选值链接在一起。
例如,.get("John").flatMap(x -> x.get("ModName")).flatMap(x -> x.get("TestName")).map(Assessment::getGrade)
。
如果“John”在第一个映射中不存在,那么 .get("John")
会给我一个空值,如果我使用 .flatMap(x -> x.get("ModName"))
,我会得到一个空指针异常。
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
class CustomMap<V> {
private final Map<String, Optional<V>> map;
public CustomMap() {
map = new HashMap<String, Optional<V>>();
}
public Optional<V> get(String key) {
return map.get(key);
}
public int size() {
return map.size();
}
public CustomMap<V> put(V item) {
map.put(item.getKey(), Optional.ofNullable(item));
return this;
}
您可以在 get 方法中写一个检查,如下所示:
public Optional<V> get(String key) {
if (map.contains(key)) {
return map.get(key);
} else {
return Optional.empty();
}
}