我有protobuf
message ResultsPb{
repeated int32 Result = 1;
}
和scala中的对应
Results: List[Int]
我是新手,我很难找到从一个转换到另一个的正确方法。这是我到目前为止所提出的,但并不完全确定。第一个def不构建,第二个def构建。
def toResults(resultsPb: Option[ResultsPb]): List[Int] ={
List[Int](resultsPb.Result)
}
def fromResults(results: List[Int]): Option[ResultsPb] ={
Some(ResultsPb (results.toSeq))
}
非常感谢任何帮助。
由于
答案 0 :(得分:0)
def toResults(resultsPb: Option[ResultsPb]): List[Int] ={
resultsPb.toList.flatMap(_.Result)
}
def fromResults(results: List[Int]): Option[ResultsPb] ={
Some(results).filter(_.nonEmpty).map(t => ResultPb(t))
}
<强>更新强>
因此,要将可选的proto类转换为其参数,您需要
这可以像Bob提出的那样(使用模式匹配),或者使用flatMap进行简化(但在需要将Option转换为Seq / List以满足类型检查之前)
在第二种方法中,你可以再次使用if语句(检查List是否为空),匹配(用&#34检查相同; case _ :: Nil =&gt; ... case Nil =&gt; &#34;)或者我提议过滤空结果并在这种情况下自动获取无。