小编Ram*_*gil的帖子

具有未来返回类型的 Scala 递归函数

我正在 Scala 中编写递归重试函数,我想知道将来的创建是否存在运行时错误。如果有,则重试未来的实例化。

想象一下我有一个数据库查询功能:

dbLookup(userId : UserId) : Option[UserName] = ???
Run Code Online (Sandbox Code Playgroud)

重试看起来像这样:

retry[T](f : () => Future[Option[T]],  
         notifyFailure : (t : Throwable) => Unit,
         n : Int) : Future[Option[T]] = {
  if(n <= 0) { Future{None} }
  else {
    val fut = f()
    if(f.resultsInException) {      //I don't know how to write this
      notifyFailure(f.exception)
      retry(f, notifyFailure, n-1) //try again
    }
    else {
      f.originalValueAsFuture
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如何实现这个未来的功能并允许尾递归优化?

如果在我尝试创建 Future 时执行上下文不断抛出异常,则此函数可用于为用户重试数据库 10 次:

val userNameAfterRetries = 
  retry(() => Future{dbLookup("1234")},
        (t) => system …
Run Code Online (Sandbox Code Playgroud)

concurrency scala

3
推荐指数
1
解决办法
691
查看次数

将 Scala 并发持续时间添加到日期时间

我如何scala.concurrent.Duration在一些 Java/Scala 时间表示中添加一个以获取未来/过去的时间?

我真的很喜欢 Scala 如何Duration为整数添加方法(例如10 seconds),所以我正在尝试做一些以下形式的事情:

import java.time.LocalDateTime

val futurePoint: LocalDateTime = LocalDateTime.now + (10 Seconds)
Run Code Online (Sandbox Code Playgroud)

我不想使用本答案中建议的其他库,我试图坚持使用 Java/Scala 语言库。

java datetime scala

3
推荐指数
1
解决办法
2237
查看次数

使用Akka Stream从DataBase流式传输记录

我有一个使用Akka的系统,它目前通过消息队列处理传入的流数据.当记录到达时,它被处理,mq被激活并且记录被传递以在系统内进一步处理.

现在我想添加对使用DB作为输入的支持.
什么是输入源能够处理数据库的方法(应该以接收器可以处理的速度输入> 100M记录 - 所以我假设反应/ akka-streams?)?

akka reactive-streams akka-stream

3
推荐指数
1
解决办法
1250
查看次数

根据Scala中重复的正则表达式拆分字符串

在Scala中,我有一个表单的字符串

val str = "[ab][bc][cd][dx][42]"
Run Code Online (Sandbox Code Playgroud)

什么是Scala中最有效的方法,正则表达式利用或以其他方式将该字符串拆分Seq[String]为以下格式:

("ab","bc","cd","dx","42")
Run Code Online (Sandbox Code Playgroud)

谢谢.

regex scala

2
推荐指数
1
解决办法
243
查看次数

*基本*单字符串列的JavaFX TableView

我正在尝试创建一个非常简单的 JavaFX TableView:1 列字符串。我有一个我想可视化的数组:

String[] acronyms = {"Foo", "Bar"};
Run Code Online (Sandbox Code Playgroud)

文档假定某种数据类型来填充多个列(例如 Person、Book 等)。我会比那更“你好世界”:只显示一个字符串数组。

使用场景构建器,我创建了一个带有表和列的 fxml 文件:

<TableView fx:id="clientAcronymTable" prefHeight="200.0" prefWidth="200.0">
 <columns>
  <TableColumn fx:id="clientAcronymColumn" prefWidth="199.0" text="Client Acronyms" />
 </columns>
  <columnResizePolicy>
     <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
  </columnResizePolicy>
</TableView>
Run Code Online (Sandbox Code Playgroud)

然后我将这些元素“连线”到我的控制器中:

@FXML private TableView<String> clientAcronymTable;

@FXML private TableColumn<ObservableList<String>, String> clientAcronymColumn;
Run Code Online (Sandbox Code Playgroud)

在我的Initializable::initialize方法中,我有:

clientAcronymTable.setItems(FXCollections.observableList(acronyms));
Run Code Online (Sandbox Code Playgroud)

但是,GUI 中没有出现任何字符串。我知道发生了一些事情,因为列中显示了可见的行行,但它们都是空的。

当然还有类似的问题并不真正适用:

  1. 与不止一栏相关,不适用
  2. 创建一个自定义行类,这似乎有点矫枉过正

所以,我的问题是:

如何使我的 Array 中的字符串在 TableView 中可见

如何使单列可编辑,以便用户可以添加更多字符串

预先感谢您的考虑和回应。

java javafx

2
推荐指数
1
解决办法
2555
查看次数

将java enum转换为scala Enumeration for json4s serialization

我正在使用json4s库将scala case类转换为json消息.我的case类依赖于第三方java枚举类型:

//third party java code
public enum Fruit {
    Banana (1),
    Cherry (2);
}
Run Code Online (Sandbox Code Playgroud)

然后我的scala类使用此枚举作为参数:

case class Order(fruit : Fruit, quantity : Int)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用EnumNameSerializer `org.json4s.ext'库提供的:

import org.json4s._
import org.json4s.native.Serialization
import org.json4s.native.Serialization.{write, read}
import org.json4s.ext.EnumNameSerializer

case class Order(fruit : Fruit, quantity : Int) {
  implicit lazy val formats =
    DefaultFormats + new EnumNameSerializer(fruit)
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个编译时错误:

错误:推断类型参数[Fruit]不符合类EnumNameSerializer的类型参数bounds [E <:Enumeration]

如何将java枚举转换为json4s的EnumNameSerializer的scala Enumeration?

我希望避免编写自定义序列化程序,因为我的实际用例涉及我的case类中使用的许多不同的java枚举类型,因此我将不得不编写许多不同的自定义序列化程序.

提前感谢您的考虑和回应.

java scala json4s

2
推荐指数
1
解决办法
1422
查看次数

如何将akka http与akka流绑定?

我正在尝试使用流而不是纯粹的actor来处理http请求,我带来了以下代码:

trait ImagesRoute {

  val log = LoggerFactory.getLogger(this.getClass)

  implicit def actorRefFactory: ActorRefFactory
  implicit def materializer: ActorMaterializer

  val source =
    Source
      .actorRef[Image](Int.MaxValue, OverflowStrategy.fail)
      .via(Flow[Image].mapAsync(1)(ImageRepository.add))
      .toMat(Sink.asPublisher(true))(Keep.both)

  val route = {
    pathPrefix("images") {
      pathEnd {
        post {
          entity(as[Image]) { image =>

            val (ref, publisher) = source.run()

            val addFuture = Source.fromPublisher(publisher)

            val future = addFuture.runWith(Sink.head[Option[Image]])

            ref ! image

            onComplete(future.mapTo[Option[Image]]) {
              case Success(img) =>
                complete(Created, img)

              case Failure(e) =>
                log.error("Error adding image resource", e)
                complete(InternalServerError, e.getMessage)
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是正确的方法,或者即使这是一个很好的方法,或者如果我应该使用actor与路径交互,使用ask模式然后在actor内部,流式传输所有内容.

有任何想法吗?

scala akka akka-stream akka-http

2
推荐指数
1
解决办法
594
查看次数

用akka-stream过滤异步

是否有与该mapAsync()方法等效的方法,但适用于filter

这是使用伪代码的示例:

val filter: T => Future[Boolean] = /.../

source.filter(filter).runWith(/.../)
       ^^^^^^
Run Code Online (Sandbox Code Playgroud)

谢谢

akka-stream

2
推荐指数
1
解决办法
383
查看次数

如何将通过DA Ledger API接收的DAML元组转换为Java对?

我编写了一个生成元组列表的DAML模型,例如[(Int, Text)].我通过DA Ledger API接收这些数据 - 如何将其转换为List<Pair<Long, String>>Java?

daml

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

如何对 ActorPublisher 进行反压

我正在编写一些示例来理解 akka 流和背压。我正在尝试了解缓慢的消费者背压对 AkkaPublisher 有何影响

我的代码如下。

class DataPublisher extends ActorPublisher[Int] {

  import akka.stream.actor.ActorPublisherMessage._

  var items: List[Int] = List.empty

  def receive = {
    case s: String =>
      println(s"Producer buffer size ${items.size}")
      if (totalDemand == 0)
        items = items :+ s.toInt
      else
        onNext(s.toInt)

    case Request(demand) =>
      if (demand > items.size) {
        items foreach (onNext)
        items = List.empty
      }
      else {
        val (send, keep) = items.splitAt(demand.toInt)
        items = keep
        send foreach (onNext)
      }


    case other =>
      println(s"got other $other")
  }
}
Run Code Online (Sandbox Code Playgroud)

Source.fromPublisher(ActorPublisher[Int](dataPublisherRef)).runWith(sink) …
Run Code Online (Sandbox Code Playgroud)

scala reactive-programming akka reactive-streams akka-stream

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

将akka ByteString转换为Java InputStream?

在Scala中,如何akka.util.ByteString将a转换为java.io.InputStream

我尝试了以下方法:

val byteStringToInputStream : ByteString => InputStream = 
  byteStr => new ByteArrayInputStream(byteStr.asByteBuffer.array()))
Run Code Online (Sandbox Code Playgroud)

但这导致抛出异常

java.nio.ByteBuffer.array中的java.nio.ReadOnlyBufferException(ByteBuffer.java:996)

预先感谢您的考虑和回应。

java scala akka

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

Scala对象的序列化

我正在跟踪scala对象序列化基本示例。但是,运行以下单元测试时

package mytest

import java.io.{ByteArrayOutputStream, ObjectOutputStream}

import org.scalatest.{Matchers, WordSpec}

class BasicSerializationSpec extends WordSpec with Matchers {

  @SerialVersionUID(123L)
  class TestRecord(var content: String) extends Serializable {
    override def toString = s"TestRecord($content)"
  }

  "A TestRecord" should {
    "be serializable" in {
      val oo = new ObjectOutputStream(new ByteArrayOutputStream())

      val tr = new TestRecord("42")

      oo.writeObject(tr)

      oo.close
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

org.scalatest.Assertions $ AssertionsHelper java.io.NotSerializableException:在java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)在java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)在java.io.ObjectOutputStream。 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)的writeSerialData(ObjectOutputStream.java:1509)java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)的java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java) :1548)at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)at java .io。mytest.BasicSerializationSpec。$ anonfun $ new $ 2(BasicSerializationSpec.scala:20)的ObjectOutputStream.writeObject(ObjectOutputStream.java:348)

我试图明确设置类型

val tr : java.io.Serializable …
Run Code Online (Sandbox Code Playgroud)

java serialization scala

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