如何在Scala中为java.UnaryOperator <T>接口编写lambda?

mis*_*hka 3 lambda scala

我在scala中编写了这段代码:

def push(x: T): Unit = ref.updateAndGet(new UnaryOperator[List[T]] {
  override def apply(t: List[T]): List[T] = x :: t
})
Run Code Online (Sandbox Code Playgroud)

并希望以更实用的方式重写它,比如

def push(x: T): Unit = ref.updateAndGet(t => x::t)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.是否可以正确地进行这样的铸造?

Lio*_*ort 7

scala-java8-compat有java8函数转换器

import scala.compat.java8.FunctionConverters._

def push(x: T): Unit = ref.updateAndGet(asJavaUnaryOperator(t => x::t))
Run Code Online (Sandbox Code Playgroud)


Ale*_*nov 1

在 Scala 2.12(RC 1 已经发布)中,这将自动完成(即ref.updateAndGet(t => x::t)正常工作)。在 Scala 2.11 中,这已经存在,但在-Xexperimental编译器标志下,并且支持不完整(我不知道确切的限制)。