Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8::(双冒号)运算符的Scala等价物_Java_Scala - Fatal编程技术网

Java 8::(双冒号)运算符的Scala等价物

Java 8::(双冒号)运算符的Scala等价物,java,scala,Java,Scala,我需要处理来自Scala的Java8流。Scala中Java8的等价物是什么 // Java IntStream.range(1, 4) .forEach(System.out::println); // Scala IntStream.range(1, 4) .forEach() // <- ??? //Java IntStream.range(1,4) .forEach(System.out::println); //斯卡拉 IntStream.range(1,4) .fo

我需要处理来自Scala的Java8流。Scala中Java8的等价物是什么

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

// Scala
IntStream.range(1, 4)
  .forEach() // <- ???
//Java
IntStream.range(1,4)
.forEach(System.out::println);
//斯卡拉
IntStream.range(1,4)
.forEach()/这非常简单:

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))

scala中方法引用的等效值如下:

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

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

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

谢谢,但我需要做的是处理Java流API,而不是实现同样的功能question@Shouichi所以你应该更具体地说明你想要实现什么。在Java中,必须使用特殊运算符作为变量访问函数。在Scala中,不需要特殊运算符。例如,
System.out::println
将是
java.lang.System.out.println
,仅此而已。谢谢。虽然这可能是我想要的,但我得到了
错误:扩展函数缺少参数类型((x$1)=>System.out.println(x$1))
。有什么想法吗?@Shouichi使用2.11.4 REPL为我工作,如上所述。我想这确实是一个实验性的特征!也许可以尝试使用不同的语法变体(例如
x=>f(x)
f
f(
)和
f
)。最坏的情况就是实现
IntConsumer
接口。看起来确实如此!我不想在生产系统中使用实验性功能并实现Java的流接口。这不起作用,因为它不满足类型系统。