scala - 我怎样才能以功能方式正确编写此代码而不会重复
问题描述
在以下函数中,我传递了一个Option
. 根据Option
isSome
或None
,我需要调用特定的 API,但其余代码对于Some
和都是相同的None
。我不知道如何删除代码重复。我怎样才能以函数式编程风格重新编写代码?
def getRowsByPartitionKeyId(id:I, pagingStateOption:Option[PagingState]):Tuple2[Option[List[M]],Option[PagingState]] = {
pagingStateOption match {
case Some(pagingState:PagingState) => {
val resultSet = session.execute(whereClause
.setFetchSize(1)
.setPagingState(pagingState)) //THIS IS THE ONLY DIFFERENCE IN THE TWO CODE LEGS
val it = resultSet.iterator();//resultSet is an iterator
val newPagingState:PagingState = resultSet.getExecutionInfo.getPagingState
if(it.hasNext){
val resultSetAsList:List[Row] = asScalaIterator(it).toList
val resultSetAsModelList = rowToModel(resultSetAsList.head)
Tuple2(Some(List(resultSetAsModelList)),Some(pagingState))
}
else {
Tuple2(None, None)
}
}
case None =>{
val resultSet = session.execute(whereClause
.setFetchSize(1)) //get one row from ResultSet. Cassandra might return more or less though
val it = resultSet.iterator();//resultSet is an iterator
val pagingState:PagingState = resultSet.getExecutionInfo.getPagingState
if(it.hasNext){
val resultSetAsList:List[Row] = asScalaIterator(it).toList
val resultSetAsModelList = rowToModel(resultSetAsList.head)
Tuple2(Some(List(resultSetAsModelList)),Some(pagingState))
}
else {
Tuple2(None, None)
}
}
}
解决方案
def getRowsByPartitionKeyId(
id:I,
pagingStateOption:Option[PagingState]
): (Option[List[M]], Option[PagingState]) = {
val resultSet = session.execute(pagingStateOption match {
case Some(pagingState: PagingState) =>
whereClause.setFetchSize(1).setPagingState(pagingState)
case None =>
whereClause.setFetchSize(1)
})
val it = resultSet.iterator();//resultSet is an iterator
val newPagingState:PagingState = resultSet.getExecutionInfo.getPagingState
if (it.hasNext) {
val resultSetAsList:List[Row] = asScalaIterator(it).toList
val resultSetAsModelList = rowToModel(resultSetAsList.head)
Tuple2(Some(List(resultSetAsModelList)),Some(pagingState))
} else {
Tuple2(None, None)
}
}
推荐阅读
- sql - 根据 mod 日期消除数据库行
- java - 表达式中未使用的 ExpressionAttributeNames 中提供的值:keys | DynamoDB Java 开发工具包
- python - Keras:不能在 model.fit 中使用 ImageDataGenerator 作为验证数据
- reactjs - React 组件内部的静态
- python - 像素值的除法和乘法
- php - CakePHP中如何设置关联表的连接
- docusignapi - 实现docusign connect api
- python - 如何将字符串转换为csv文件中的浮点数
- javascript - 所有数组值都相同时的拼接问题
- c# - .Net Core 3 worker 服务应用程序,带有带有参数的构造函数的插件