如何创建一个包含可选的 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();
    }
}