Scala相当于Java 8 ::(双冒号)运算符

时间:2015-12-02 07:52:48

标签: java scala

我需要处理来自Scala的Java 8流。什么是Scala中Java 8 ::运算符的等价物?

// Java
IntStream.range(1, 4)
  .forEach(System.out::println);

// Scala
IntStream.range(1, 4)
  .forEach() // <- ???

3 个答案:

答案 0 :(得分:4)

您可以在编译或运行REPL时使用-Xexperimental,以便访问将Scala函数转换为所需Java SAM的实验性功能:

IntStream.range(1, 4).forEach(System.out.println(_))

答案 1 :(得分:1)

这很简单:

scala> (1 to 4).foreach(println)
1
2
3
4

在Scala中,引用方法而不提供参数,例如:

def fn(arg: SomeType)

(collection_of_some_type).foreach(fn)

被贬低为

(collection_of_some_type).foreach(fn(_))

反过来转换为:

(collection_of_some_type).foreach(next_entry => fn(next_entry))

答案 2 :(得分:0)

scala中方法引用的等价物如下:

IntStream.range(1, 4)
  .forEach(System.out.println _)