Kafka Streams物化视图与Kotlin

时间:2018-05-24 21:39:42

标签: kotlin apache-kafka apache-kafka-streams

要用Java创建kafka流状态存储,我可以这样做:

final KGroupedStream<String, String> wordCounts = textLines
            .flatMapValues(value -> Arrays.asList(pattern.split(value.toLowerCase())))
            .groupBy((key, word) -> word);

wordCounts.count(Materialized.<String, Long, KeyValueStore<Bytes, byte[]>>as(WORD_COUNT_STORE));

我试图把它转换成Kotlin,就像这样:

val wordCounts: KGroupedStream<String, String> = textLines
        .flatMapValues({value -> value.split("\\W+") })
        .groupBy({ _, word -> word})

wordCounts.count(Materialized.<String, Long, KeyValueStore<Bytes, Array<Byte>>>as(WORD_COUNT_STORE))

但是,我收到以下编译器错误:

Interface KeyValueStore does not have constructors

我需要做什么?

2 个答案:

答案 0 :(得分:2)

由于as是Kotlin中的保留字,因此请尝试使用反引号围绕as,即

`as`

答案 1 :(得分:2)

以防其他人使用它,以及拉曼建议的反引号,我还必须进行其他一些更改:

  • 首先,需要在as方法之后而不是在Materialized类之后直接指定泛型类型。
  • 第二,我不得不使用Array<Byte>而不是使用ByteArray

因此对我有用的全部代码是:

wordCounts.count(Materialized.`as`<String, Long, KeyValueStore<Bytes, ByteArray>>(WORD_COUNT_STORE))