gpt4 book ai didi

scala - 处理 Scala Map 中缺失的键和空值的优雅方式

转载 作者:行者123 更新时间:2023-12-01 09:09:51 25 4
gpt4 key购买 nike

我明白

  • 在 Scala 中应避免使用 null
  • Map.get 将返回一个 Option[B] 并且我可以使用 .getOrElse 来获取值并回退到默认值

  • 例如
    map.getOrElse("key1","default")

    同时,我正在与一个 Java 库进行交互,其中一些值为 null。

    例如
    map (“key1”->空)
    getOrElse在这种情况下将抛出空指针。

    我想处理这两种情况并导致写出这样的东西
      def getOrElseNoNull[A,B](map:Map[A,B],key:A,default:B) = {
    map.get(key) match{
    case Some(x) if x != null => x
    case _ => default
    }
    }

    这很丑陋。 (它是 Map[Any],我需要一个来自该键的字符串)
    getOrElseNoNull(map,"key1","").asInstanceOf[String])

    是否可以使用隐式扩展 map 或任何其他优雅的方式?

    最佳答案

    如果你正在处理一个不可变的 Map,最安全的做法是预先过滤掉所有的空值(这会导致创建另一个 Map 实例,但除非你有特别的理由来关心这里的性能)应该不是问题)。

    val withoutNulls = map.filter{case (k,v)=> v != null}

    任何持有空值的键都消失了,因此 getOrElse在这个键上将返回 None .
    微不足道,并且一劳永逸地完成工作。

    关于scala - 处理 Scala Map 中缺失的键和空值的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175283/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com