scala - 如何组合两个对象元素
问题描述
我想将两个单独的结果合并为一个结果。我的第一个结果是第一个算法的 itemscore:
PredictedResult(List(ItemScore(140849,0.6259532295250041,0.0,0.0,0.0)),List())
我的第二个结果是第二种算法的规则分数:
PredictedResult(List(),List(Rule(Set(140855),List(ItemScore(368788,0.0,1.3516984090509725E-5,0.1111111111111111,38.59207094418362)))))
您可以看到第一个结果有一个 Empty 列表。此列表填写第二个结果。这也适用于项目分数,反之亦然。
服务类只接受两个结果之一,但不接受组合。
服务.scala:
package org.template
import org.apache.predictionio.controller.LServing
class Serving
extends LServing[Query, PredictedResult] {
override
def serve(query: Query,
predictedResults: Seq[PredictedResult]): PredictedResult = {
println(predictedResults(0))
println(predictedResults(1))
// Returning
predictedResults(0)
}
}
引擎.json:
package org.template
import org.apache.predictionio.controller.EngineFactory
import org.apache.predictionio.controller.Engine
// Query most similar (top num) items to the given
case class Query(items: Set[String], num: Int) extends Serializable
case class PredictedResult(itemScores: List[ItemScore], rules: List[Rule])
case class Rule(cond: Set[String], itemScores: List[ItemScore])
extends Serializable
case class ItemScore(item: String, score: Double, support: Double, confidence: Double, lift: Double) extends Serializable with
Ordered[ItemScore] {
def compare(that: ItemScore) = this.score.compare(that.score)
}
当我点击查询时,现在我得到了唯一的一个结果:
{"itemScores":[{"item":"140849","score":0.6259532295250041,"support":0.0,"confidence":0.0,"lift":0.0}],"rules":[]}
预期输出(来自 algorithm1 的 ItemScore 与来自 algorithm2 的 Rule 相结合):
PredictedResult(List(ItemScore(140849,0.6259532295250041,0.0,0.0,0.0)),List(Rule(Set(140855),List(ItemScore(368788,0.0,1.3516984090509725E-5,0.1111111111111111,38.59207094418362)))))
解决方案
++
像这样尝试列表连接
case class ItemScore(i: Int)
case class Rule(s: String, itemScores: List[ItemScore])
case class PredictedResult(itemScores: List[ItemScore], rules: List[Rule])
val pr1 = PredictedResult(List(ItemScore(1)), Nil)
val pr2 = PredictedResult(Nil, List(Rule("rule1", List(ItemScore(2)))))
PredictedResult(pr1.itemScores ++ pr2.itemScores, pr1.rules ++ pr2.rules)
哪个输出
res0: PredictedResult = PredictedResult(List(ItemScore(1)),List(Rule(rule1,List(ItemScore(2)))))
推荐阅读
- javascript - Modal 没有在我的 react-native 应用程序中关闭?
- angular - 覆盖特定文件的角度加载器
- javascript - 如何将计算值复制到剪贴板?
- amazon-web-services - 如何构建文件的无服务器转换
- php - 单击下个月时创建事件
- javascript - 如何从 css 使用 jQuery 控制动画时间
- c# - 如何保持图表中的间隔?在 Designer 中,必要的代码行不断消失
- flutter - 更改 DropDownButton 选择时出现颤振错误
- hive - 连接到 Hive 元存储失败:[localhost:9083]
- java - 单点登录成功登录后重定向到不同的 url