我有以下代码:
source
.mapValues(value -> value + " Stream it!!!")
.print(Printed.toSysOut());
如您所见,mapValues
期望使用lambda表达式。
现在,我正在使用Java库,但是该应用程序是用Scala编写的。如何将Scala lambda传递给Java代码?
我尝试了以下方法:
source
.mapValues(value => value + "hello")
.print(Printed.toSysOut)
但是编译器抱怨:
[error] (x$1: org.apache.kafka.streams.kstream.Printed[String,?0(in value x$1)])Unit <and>
[error] (x$1: org.apache.kafka.streams.kstream.KeyValueMapper[_ >: String, _ >: ?0(in value x$1), String])Unit <and>
[error] (x$1: String)Unit
[error] cannot be applied to (org.apache.kafka.streams.kstream.Printed[Nothing,Nothing])
[error] .print(Printed.toSysOut)
[error] ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 2 s, completed Nov 19, 2017 7:53:44 PM
错误消息列出了print
支持的参数类型。其中之一是:
org.apache.kafka.streams.kstream.Printed[String,?0(in value x$1)]
从错误消息中,您可以看到您提供Printed.toSysOut
了以下类型:
org.apache.kafka.streams.kstream.Printed[Nothing,Nothing]
根据Kafka 1
javadoc
(Printed
在Kafka
1.1中不存在),toSysOut
定义为:
public static <K,V> Printed<K,V> toSysOut()
因此,答案是Scala进行推断K
并V
具有类型Nothing
。您需要显式提供类型。
以下可能会起作用:
source
.mapValues[String](value -> value + " Stream it!!!")
.print(Printed.toSysOut[String,String])
问题内容: 我正在尝试使用字符串方法。但是,如果我将%1,%2等放置在字符串中,则会抛出java.util.UnknownFormatConversionException,指向一个令人困惑的Java源代码片段: 从中我了解到 char是被禁止的。如果是这样,那么我应该对参数占位符使用什么? 我使用Scala 2.8。 问题答案: 尽管所有先前的回答都是正确的,但它们都是Java语言。这是一个Sc
问题内容: 我正在使用Scala 2.8中的JSON类中的构建来解析JSON代码。由于最小化依赖性,我不想使用Liftweb或其他任何一种。 我这样做的方法似乎势在必行,是否有更好的方法可以做到? 问题答案: 这是一个基于提取器的解决方案,它将进行类转换: 在for循环的开始,我人为地将结果包装在一个列表中,以便在最后生成一个列表。然后在for循环的其余部分中,我将使用生成器(使用)和值定义(使用
问题内容: 如何引用一个Java包,其中包含名称如Scala中的com.example.object的对象? Scala将对象视为保留字并抱怨。 问题答案: 将保留字放在反引号中,如下所示:
我想在Scala 3/sbt项目中使用Gatling。 问题是Gatling打包它的库没有Version-Postfix。所以我认为对于任何这样做的Scala库来说,你都有同样的问题。 我尝试了一些方法,例如: > 给予: 和 > 根据Scala 3文档: 给予: 有办法吗?
Junit5引入了@BeforeAll来表示应在当前测试类中的所有测试之前执行带注释的方法。但是它要求方法是静态的。 我的 Scala 测试套件中有以下结构: 以及其他测试类别: 所以我希望< code > codeNeedeForAllTests 在所有测试之前被调用,但是问题是< code>@BeforeAll要求方法是静态的,为此我需要将codeNeedeForAllTests作为对象,以便
问题内容: 我有一个Scala对象,需要在Java类中使用。 这是Scala对象 如何在Java中使用此Scala对象? 到目前为止,我已经尝试了以下操作,但未成功(编译错误): //返回一个没有用的字符串,因为我想要实际的Person对象 问题答案: 编辑 :一个工作示例(我检查过,它可以编译并工作):Scala: Java对应项: