我理解
例如。
map.getOrElse("key1","default")
同时,我正在与一个Java库交互,其中一些值为null。
e、 g.地图(“键1”-
在这种情况下,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[任何],我需要该键的字符串)
getOrElseNoNull(map,"key1","").asInstanceOf[String])
是否可以使用隐式或任何其他优雅的方式来扩展贴图?
一种可能性是将值映射到Option()
:
val withoutNulls: Map[Int, Option[String]] = withNulls.mapValues(Option.apply)
这使您能够以相同的方式处理缺少的值和空值:
val nullsEqualMissing: Map[Int, Option[String]] = withoutNulls.withDefaultValue(None)
nullsEqualMissing(1).fold{ "nullOrMissing" }{ identity }
或单独处理缺失值:
withoutNulls.get(1).fold{ "missing" }{ _.fold{ "null" }{ identity }}
隐式扩展类来拯救:
implicit class NullOccludingMap[K, V](private val underlying: Map[K, V]) extends AnyVal {
def getNonNullOrElse(key: K, default: V): V = {
underlying.get(key) match {
case Some(value) if value != null => value
case _ => default
}
}
}
然后,您可以在范围内的任何地方使用它:
val test = Map("x" -> "Hi", "y" -> null)
test.getNonNullOrElse("z", "") // ""
test.getNonNullOrElse("y", "") // ""
如果您处理的是一个不可变映射,最安全的做法是预先过滤掉所有的空值(这会导致创建另一个映射实例,但除非您有特定的理由关心这里的性能,否则这不应该是一个问题)。
val withoutNulls = map.filter{case (k,v)=> v != null}
任何保留null的键都将消失,因此此键上的getOrElse将返回None。琐碎,一次完成任务。
我目前正在开发JavaFX中的计算器,现在正在尝试实现键盘输入支持。 为此,我试图在主. java文件中实现一个EventHandler,如下所示: FXMLDocumentController。java: 现在的问题是,每当按下这些键时,都会发生与我在GUI中单击相应按钮时相同的事情。 所有数字按钮共享一个onAction事件, ,-,/,* 也共享一个,等等。它们都使用FXMLDocument
但这不是有效的语法。 我是否必须分别检查每一个密钥才能处理无的情况?
假设我们有一个键-值映射的数据结构,其中键本身也是一个键-值映射。例如: 现在,假设我们要查询此映射中与键的某个键值子集匹配的所有顶级键/值。示例: 我们的查询是“给我所有key值,其中key包含,它将返回第一个和第三个值将返回所有同时具有和的键值,生成第二个值。显然,我们可以在每一个查询的完整地图中进行搜索,但我正在寻找比这更高效的方法。 我四处查看了一下,但是找不到一个高效、易用的C解决方案。
本文向大家介绍Idea servlet映射方法优缺点对比,包括了Idea servlet映射方法优缺点对比的使用技巧和注意事项,需要的朋友参考一下 配置Servlet的方法有俩种,分别是传统web.xml文档中部署servlet和注解方式部署servlet,下面就先一起来学习下注解方式部署servlet 注解方式部署servlet: 首先在idea项目空间里创建一个class类 然后在类名后面接上
问题内容: 使用Hibernate,可以创建一个组合ID,其中要映射到该ID的列之一可以为空值吗? 这是为了处理具有唯一键的旧表,该键可以具有空值,但不能具有主键。 我意识到我可以只向表中添加一个新的主键列,但是我想知道是否有任何方法可以避免这样做。 问题答案: 否。主键不能为null。
我的问题是,我得到每次我试图映射一个与。有没有一种方法来编辑这个实现,以某种方式处理重复的键?或者我应该用另一种方式去做?