我有一组按顺序完成的操作,但如果中间序列返回“null”,我希望尽早中止该操作(跳过后续步骤)。
我想出了一个这样的函数,它给出了一个输入参数,对Redis执行几个操作,如果存在的话,它将返回一个乘积。由于中间请求中有一个可能返回空值,所以整个操作可能会“失败”,因此我想缩短后续的不必要步骤。
def getSingleProduct(firstSku: String): Option[Product] = {
val jedis = pool.getResource
val sid: Array[Byte] = jedis.get(Keys.sidForSku(firstSku, sectionId, feedId).getBytes)
Option(sid).flatMap {
sid: Array[Byte] =>
Option(jedis.get(Keys.latestVersionForSid(sectionId, feedId, sid))) flatMap {
version: Array[Byte] =>
Option(Keys.dataForSid(sectionId, feedId, version, sid)) flatMap {
getDataKey: Array[Byte] =>
Option(jedis.get(getDataKey)) flatMap {
packedData: Array[Byte] =>
val data = doSomeStuffWith(packedData)
Option(Product(data, "more interesting things"))
}
}
}
}
}
这样做的方法是使用for
:
for {
sid <- Option(jedis.get(...))
version <- Option(jedis.get(..., sid, ...))
getDataKey <- Option(jedis.get(...version,...))
packedData <- Option(jedis.get(getDataKey))
} yield {
// Do stuff with packedData
}
如果任何get
调用返回none
,则返回none
,否则返回some(x)
,其中x
是yeild
表达式的结果。
您可能还需要考虑为jedis.get
编写一个包装器,该包装器返回option(x)
而不是使用null
作为错误结果。
我有以下实体: 我尝试过创建@OneToOne(FetchType.lazy),但不起作用,它仍然提取不需要的信息。 如何避免获取复合对象? 我希望最终结果不包含Address对象,因为它在20个场景中需要一次,我可以分别获取它们。 任何想法,如何实现这一点。 谢谢
想象一下我有一个阶级家庭。它包含一个人员列表。每个(班级)人都有一个(班级)地址。每个(类)地址都包含一个(类)邮政编码。任何“中间”类都可以为空。 那么,有没有一种简单的方法可以在不必在每一步都检查null的情况下访问PostalCode?i、 例如,有没有办法避免以下菊花链代码?我知道没有“原生”Java解决方案,但我希望如果有人知道某个库或其他东西。(已选中Commons 不,不能改变结构。
问题内容: 您如何深度克隆Javascript对象? 我知道有很多基于类似的框架的功能,但是我不想使用类似的框架。 创建深度克隆的最优雅或最有效的方法是什么。 我们确实关心诸如克隆数组之类的边缘情况。不打破原型链,处理自我参考。 我们不在乎是否支持DOM对象的复制,因为存在该原因。 正如我主要想在使用V8引擎的ES5功能中使用深度克隆一样。 [编辑] 在有人建议我之前,先通过原型继承对象创建副本与
在Java,有没有一种方法可以避免在调用的每个级别上嵌套null检查,以确保沿途没有阻止下一次调用的null。有没有一个优雅的方法来做这件事? 例如: Objone.ObjTwo.ObjTree.ObjFour.ObjF
问题内容: 避免嵌套查询有多重要。 我一直学会避免像瘟疫一样躲避它们。但是对我来说,它们是最自然的事情。在设计查询时,我首先写的是嵌套查询。然后,我将其转换为联接,有时需要花费很多时间才能正确。而且很少会带来很大的性能提升(有时确实会提高) 他们真的那么糟糕吗?有没有一种方法可以使用没有临时表和文件排序的嵌套查询 问题答案: 这确实取决于我遇到的情况,我可以通过使用子查询来改进一些查询。 我知道的
在我的代码中,我有: 一个扩展JComponent的抽象类,其中包含一些JTextFields。JTextFields是不可编辑的。JComponent类实现了MouseListener:-当mouseEnted事件触发时,将向其添加一个边框。-当mouseExted事件触发时,边框被删除。-当mouseClick事件触发时,该组件的所有字段都设置为可编辑。 这应该是这样的: 用户想要编辑一个字段