代码之家  ›  专栏  ›  技术社区  ›  Andrew Cheong

如何使“Map::get”返回找到的值的“Optional”或“Optional.empty()`

  •  6
  • Andrew Cheong  · 技术社区  · 7 年前

    我试着这么做:

    return Optional.of(myMap.getOrDefault(myKey, null));
    

    真的,我想要的是 Optional.of(foundVal) 如果发现,则为 Optional.empty() . 我不相信 Optional.of(null) 相当于。我想用什么语法?

    也就是说,我怎样才能得到地图 get Optional

    2 回复  |  直到 7 年前
        1
  •  39
  •   lealceldeiro VonC    7 年前

    return Optional.ofNullable(myMap.get(myKey));
    

    JavaDocs

        2
  •  9
  •   Savior    7 年前

    这个

    Optional.of(myMap.getOrDefault(myKey, null));
    

    还是真的

    Optional.of(null);
    

    可能会失败的 NullPointerException javadoc

    抛出:
    -如果 value 为空

    Optional#ofNullable null 是否:

    :
    价值 -要描述的可能为空的值

    从那以后呢 Map#get(Object) 已经回来了 无效的 当给定密钥没有条目时

    退换商品 :
    指定键映射到的值,或 无效的 此映射不包含键的映射

    你不需要使用 getOrDefault 用一个 无效的 默认值。你可以直接使用

    Optional.ofNullable(myMap.get(myKey));
    
        3
  •  -3
  •   neu242    5 年前

    myMap.entrySet().stream()
      .filter(it -> it.getKey().equals(myKey))
      .findFirst()
      .map(Map.Entry::getValue);