KStream不兼容的类型

时间:2017-12-05 06:32:53

标签: apache-kafka apache-kafka-streams

我正在尝试使用字符串编写部分并提出下面的代码,请帮助解决代码的语法问题。

KStreamBuilder builder = new KStreamBuilder();
KStream<String, String> textlines = builder.stream("INTOPIC");
KStream<String, String> mstream = textlines
    .foreach(new ForeachAction<String, String>(){
        public void apply(String key, String value){
            String str=value.replace("[","");
            for(int y=0; y<str.length(); y++){
                //System.out.print(str.charAt(y));
            }
            //System.out.print("\n");
        }
    });
mstream.to("OUTTOPIC");

在第二个KStream语句中显示不兼容的类型..... 我希望替换逻辑可以使用,它应该受到textlines变量的影响。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

foreach的结果是void,而不是下一个KStream。如果要转换数据,则需要使用map代替...

代码将采用以下方式(特别是如果您还需要更改密钥,如果没有 - 请参阅下一个变体):

KStreamBuilder builder = new KStreamBuilder();
KStream<String, String> textlines = builder.stream("INTOPIC");
KStream<String, String> mstream = textlines
    .map((key, value) -> new KeyValue<>(key, value.replace("[",""))));
mstream.to("OUTTOPIC");

或者您可以用以下内容替换第3-4行(这将导致更好的执行):

KStream<String, String> mstream = textlines
    .mapValues(value -> value.replace("[",""));