小编Joe*_*Joe的帖子

Scala:将[未来]列入未来[List],忽略失败的未来

我正在寻找一种方法将Futures的任意长度列表转换为List of Future.我正在使用Playframework,所以最终,我真正想要的是Future[Result],但为了简化,我们只是说Future[List[Int]]这样做的正常方法是使用Future.sequence(...)但是有一个扭曲......我给出的列表通常有其中约有10-20个期货,其中一个期货失败并不常见(它们正在制作外部网络服务请求).在其中一个失败的情况下,我不想重试所有这些,而是​​希望能够获得那些成功的并返回那些.

例如,执行以下操作不起作用

import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.Success
import scala.util.Failure

val listOfFutures = Future.successful(1) :: Future.failed(new Exception("Failure")) :: 
                    Future.successful(3) :: Nil

val futureOfList = Future.sequence(listOfFutures)

futureOfList onComplete {
  case Success(x) => println("Success!!! " + x)
  case Failure(ex) => println("Failed !!! " + ex)
}

scala> Failed !!! java.lang.Exception: Failure
Run Code Online (Sandbox Code Playgroud)

我没有得到唯一的例外,而是希望能够将1和3拉出来.我尝试过使用Future.fold,但显然只是Future.sequence在幕后调用.

在此先感谢您的帮助!

scala future

112
推荐指数
4
解决办法
5万
查看次数

Amazon CloudSearch:是否可以编写一个返回...所有内容的查询?

我整理了一个简单的搜索表单,搜索框和几个过滤器作为下拉列表.一切都按照您的预期工作,除了我希望行为是当用户将所有内容完全留空(没有搜索查询,没有过滤器)时,他们只是返回所有内容(当然是分页).

我目前通过检测此特例并查询我的本地数据库来实现这一目标,但使用CloudSearch 100%实现这一目标有一些优势.有没有办法构建一个只返回每个文档的分页列表的请求?换句话说,CloudSearch是否相当于"SELECT id FROM x LIMIT n?"

提前致谢!乔

amazon-web-services amazon-cloudsearch

11
推荐指数
2
解决办法
6630
查看次数

Scala:使用特征复制案例类

我是Scala的新手,我有一个关于复制案例类的最佳方法的问题,同时保留来自特征的数据.例如,假设我有以下内容:

trait Auditing {

  var createTime: Timestamp = new Timestamp(System.currentTimeMillis)
}

case class User(val userName: String, val email: String) extends Auditing

val user = User("Joe", "joe@blah.com")
Run Code Online (Sandbox Code Playgroud)

然后我想创建一个更改了一个参数的新副本:

val user2 = user.copy(email = "joe@newemail.com")
Run Code Online (Sandbox Code Playgroud)

现在,在上面的示例中,属性createTime不会被复制,因为它未在User case类的构造函数中定义.所以我的问题是:假设将createTime移动到构造函数中不是一个选项,获取包含特征值的User对象副本的最佳方法是什么?

我正在使用Scala 2.9.1

提前致谢!乔

scala

10
推荐指数
1
解决办法
3381
查看次数

结合Scala Futures和集合进行理解

我正在尝试使用for表达式迭代列表,然后使用返回Future的实用程序对每个元素进行转换.长话短说,它不编译,我想了解原因.我读了这个类似的问题,这是一个很好的帮助,但我想要做的更简单,更令人困惑的是为什么它不起作用.我正在尝试做类似的事情:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

val numberList = List(1, 2, 3)
def squareInTheFuture(number: Int): Future[Int] = Future { number * number}
val allTheSquares = for {
                          number <- numberList
                          square <- squareInTheFuture(number)
                        } yield { square }
Run Code Online (Sandbox Code Playgroud)

而我得到的是:

错误:类型不匹配; 发现:scala.concurrent.Future [Int] required:scala.collection.GenTraversableOnce [?] square < - squareInTheFuture(number)^

有人可以帮助我理解为什么这不起作用,最好的选择是什么?

scala

6
推荐指数
2
解决办法
3276
查看次数