我正在应用一些基于用户输入的过滤器,它可以像预期的那样工作,一旦我可以假设我知道编码时过滤器的数量,在下面的代码中是2。现在,我希望在我的应用程序中根据用户输入动态设置过滤器的数量,因此我正在寻找替代方法,根据需要使用“&&”和“| |”运算符来增加lambda函数。我发现类似的问题,但我找不到一个例子,动态过滤器在同一 predicate 如下。
使用 predicate 函数:
final KStream<String, EventMessage> filter_stream = stream.filter(IsGoodtoGoFilter(Filters));
private Predicate<String, EventMessage> IsGoodtoGoFilter(String[] Filters) {
// Logic to parse Dynamic Filters
/// .....
return (k, v) -> v.getPayload().getDecodedValue(Column1).toString().equals(Value1) && v.getPayload().getDecodedValue(Column2).toString().equals(Value2);
使用 predicate 测试重写:
final KStream<String, EventMessage> filter_stream = stream.filter(new Predicate<String, EventMessage>() {
@Override
public boolean test(String k, EventMessage v) {
// Logic to parse Dynamic Filters
///.....
return v.getPayload().getDecodedValue(Column1).toString().equals(Value1) && v.getPayload().getDecodedValue(Column2).toString().equals(Value2);
}
});
1条答案
按热度按时间ctzwtxfj1#
我建议你授权
java.util.BiPredicate
因为它已经有了所需的操作符。例如,如果您有一组预定义的 predicate 选项:
然后可以根据用户的输入构造一个新 predicate :
你执行卡卡的
Predicate
然后就可以授权给filter.test
. 事实上,因为它们都是功能接口,所以您可以使用filter
作为一个kstream.Predicate
.那以后呢
filter
(一)BiPredicate
)您的代表团可以是以下任何一个:或
或者你可以避开kstream
Predicate
总共:看到了吗https://en.wikipedia.org/wiki/delegation_pattern 更多关于授权的细节。