value已在kafka流的范围中定义

时间:2017-12-15 10:16:56

标签: apache-kafka apache-kafka-streams

我正在尝试使用kafka流中的编码部分,如下所示

KStreamBuilder builder = new KStreamBuilder();
KStream<String, String> textlines = builder.stream("iostatin2");
KStream<String, String> mstream = textlines
                .mapValues(value -> value.replace("[","" ) )
                .mapValues(value -> value.replace("]","" ) )
                .mapValues(value -> value.replaceAll("\":\"", "\":"))
                .mapValues(value -> value.replaceAll("\":", "\":\""))
                .mapValues(value -> value.replaceAll("\",\"", ",\""))
                .mapValues(value -> value.replaceAll(",\"", "\",\""))
                .mapValues(value -> value.replaceAll(":\"\\{", ":\\{"))
                .mapValues(value -> value.replaceAll("\\}\",", "\\},"))
                .mapValues(value -> value.replaceAll("\\},\\{" ,"\\}\\},\\{\\{"));

        textlines.foreach(new ForeachAction<String, String>() {
                     @Override
                     public void apply(String key, String value) {
                         try {
                             textlines.flatMapValues(value -> Arrays.asList(value.split("\\},\\{")));

                             Thread.sleep(2000);
                         } catch (InterruptedException e) {
                             e.printStackTrace();
                         }

                     }
                 });

所以在foreachaction()函数中

textlines.flatMapValues(value -> Arrays.asList(value.split("\\},\\{")));
此行值中的

导致错误,如变量'value'已在范围中定义。那么我应该用...替换那条线... plzz帮助我...

1 个答案:

答案 0 :(得分:2)

值已经在上面的apply()方法中用作参数, 所以改变行中的价值 textlines.flatMapValues(value -> Arrays.asList(value.split("\\},\\{")));

到v

之类的任何其他名称

textlines.flatMapValues(v -> Arrays.asList(v.split("\\},\\{")));