我有一个列表,例如有101条记录,我想批量发送10条记录的数据。list.grouped( 10 )将返回10条记录的列表和1条记录的列表。我希望将所有10个列表和10个记录发送到futureSend方法,并希望从中获取包含一条记录的列表(如果在此场景中存在,但如果列表有100条记录,则返回空列表)以供理解。因此,如果list.size不等于10,我不想将列表发送到futureSend并从中获取该列表以供理解。
val listRes = list.grouped(10)
for {
list <- listRes
if list.size == 10
_ = futureSend(list) map { result =>
println("sent")
)
}
} yield {}我希望生成大小小于10的列表(在这种情况下不要调用futureCall方法),如果所有列表的大小都是10,则生成空列表。
发布于 2020-04-19 23:50:41
for的理解对于这项工作来说是错误的工具。
val listRes = list.grouped(10).toList
listRes.init.foreach{group => futureSend(group); println("sent")}
val last = listRes.last
val remainder = if (last.length < 10) last
else {
futureSend(last)
println("sent")
List.empty[ElementType]
}如果您使用的是Scala 2.13.x,那么有一个稍微更有效的选择。
val remainder = List.unfold(list.grouped(10)){ itr =>
Option.when(itr.hasNext) {
val thisBatch = itr.next()
if (itr.hasNext || thisBatch.size == 10) {
futureSend(thisBatch)
println("sent")
(List(), itr)
} else (thisBatch, itr)
}
}.flattenhttps://stackoverflow.com/questions/61306615
复制相似问题