是否有一种方法可以进行类似分支的操作,但可以将记录放置在谓词评估为true的每个输出流中? Brach将记录放置在第一个匹配项上(文档:记录被放置到一个并且在第一个匹配项上只有一个输出流)。
答案 0 :(得分:3)
您可以“广播”并分别过滤每个流:
KStream stream = ...
stream1 = stream.filter(...);
stream2 = stream.filter(...);
// and so on...
如果您多次使用stream
变量,则所有记录将广播到所有下游过滤器(或任何其他运算符),即,对每个记录执行每个过滤器。
答案 1 :(得分:0)
我认为您可以使用类似这样的东西:
KStream<String, String> inputStream = builder.stream("input");
List<Predicate<String, String>> predicates = new ArrayList<>(); // <-- list of predicates
List<KStream<String, String>> kStreams = predicates.stream()
.map(inputStream::branch)
.map(Arrays::asList)
.map(listOfOneElementKStreams -> listOfOneElementKStreams.get(0)).collect(Collectors.toList());