首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于理解用例

用于理解用例
EN

Stack Overflow用户
提问于 2020-04-19 23:08:45
回答 1查看 38关注 0票数 0

我有一个列表,例如有101条记录,我想批量发送10条记录的数据。list.grouped( 10 )将返回10条记录的列表和1条记录的列表。我希望将所有10个列表和10个记录发送到futureSend方法,并希望从中获取包含一条记录的列表(如果在此场景中存在,但如果列表有100条记录,则返回空列表)以供理解。因此,如果list.size不等于10,我不想将列表发送到futureSend并从中获取该列表以供理解。

代码语言:javascript
复制
   val listRes = list.grouped(10)

      for {
        list <- listRes
        if list.size == 10
        _ = futureSend(list) map { result =>
          println("sent")
          )
        }
      } yield {}

我希望生成大小小于10的列表(在这种情况下不要调用futureCall方法),如果所有列表的大小都是10,则生成空列表。

EN

回答 1

Stack Overflow用户

发布于 2020-04-19 23:50:41

for的理解对于这项工作来说是错误的工具。

代码语言:javascript
复制
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,那么有一个稍微更有效的选择。

代码语言:javascript
复制
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)
    }
  }.flatten
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61306615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档