Kafka Streams материализованный вид с Kotlin - PullRequest
0 голосов
/ 25 мая 2018

Чтобы создать хранилище состояний потоков Кафки в Java, я могу сделать это:

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 голосов
/ 14 сентября 2018

В случае, если он пригодится кому-либо еще, а также кавычкам, предложенным Раманом, мне пришлось внести несколько других изменений:

  • Во-первых, универсальные типы должны быть указаны послеas метод, не сразу после Materialized класса.
  • Во-вторых, вместо использования Array<Byte> я должен был использовать ByteArray.

Так что полная строкакод, который работал для меня был:

wordCounts.count(Materialized.`as`<String, Long, KeyValueStore<Bytes, ByteArray>>(WORD_COUNT_STORE))
0 голосов
/ 25 мая 2018

Поскольку as является зарезервированным словом в Kotlin, попробуйте окружить as обратными чертами, например

`as`
...