Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中封装自定义过滤器的设计模式_Java_Design Patterns - Fatal编程技术网

java中封装自定义过滤器的设计模式

java中封装自定义过滤器的设计模式,java,design-patterns,Java,Design Patterns,我正在设计一个模块,它以JSON格式在队列中获取大量数据。现在,用户可以提供一个过滤器,模块应该能够返回与过滤器条件匹配的所有元素 数据是键值格式的,因为我事先不知道字段的名称,但它是数据本身的一部分。像这样的- metrics-list - metrics: [ { key: name, actual-metrics-values: { String

我正在设计一个模块,它以JSON格式在队列中获取大量数据。现在,用户可以提供一个过滤器,模块应该能够返回与过滤器条件匹配的所有元素

数据是键值格式的,因为我事先不知道字段的名称,但它是数据本身的一部分。像这样的-

metrics-list -
         metrics: [
            {
                key: name,
                actual-metrics-values: {
                   String : Float
                }  
            }
]
现在我正在计划过滤器对象应该具有以下类型的结构-

Class Filter {
   String Name;
   String filterCondition;
   Metrics[] apply();
}
最大的问题是如何存储filterCondition,这样我就可以在数据集上应用它,并获得与条件匹配的度量。一个例子是-我得到这样的数据-

 metrics: [
            {
                key: blah1
                actual-metrics-values: {
                   a : 10.0,
                   b : 5.0
                }  
            },
             {
                key: blah2
                actual-metrics-values: {
                   a : 7.0,
                   b : 3.0
                }  
            }
]

过滤器类似于-a>7.0&&b我感觉您想要从用户输入的字符串解析过滤器逻辑。这将非常迅速地参与进来。如果您可以将过滤器保存在Java代码中,那么lambda表达式或Guava谓词类就可以做到这一点

更新

我认为,让“自由形式”用户提供的过滤器即使与现有的表达式解析库一起工作也需要大量的工程工作。我鼓励您考虑在UI中为用户提供设置的过滤器数量,并将它们映射到java代码的过滤。 seam是否喜欢解决类似问题的正确方法。从文件:

脚本语言的一些有用特性是。。。应用程序扩展/定制:您可以“外部化”应用程序的某些部分,如金融应用程序的配置脚本、业务逻辑/规则和数学表达式


这有更多的例子。

实现这种过滤器的快速方法是在脚本语言中嵌入表达式,例如在JavaScript中,然后使用ScriptEngine对其进行计算。

我想到了Java 8中新的lambda表达式功能。是的,这正是我关心的问题。我希望用户以某种方式提供一个过滤器,我不确定是否有比让他们通过字符串传递条件更简单的方法。关于如何从用户那里获得过滤条件,有什么想法吗?谢谢。我喜欢它的声音,你能不能提供一些关于脚本语言比java更容易实现这一点的链接?谢谢。您可以动态添加脚本,甚至可以将它们作为字符串存储在数据库中,用户可以在ui中编辑这些过滤器。