Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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
如何使用sql或嵌套动态条件过滤java中列表中的数据列表_Java_Json_Lambda_Filter_Predicate - Fatal编程技术网

如何使用sql或嵌套动态条件过滤java中列表中的数据列表

如何使用sql或嵌套动态条件过滤java中列表中的数据列表,java,json,lambda,filter,predicate,Java,Json,Lambda,Filter,Predicate,如何使用java动态过滤数据,假设我们有map/json数组的数据列表,而没有pojo映射 [ { id:1001, 类型:内部, 状态:关闭 }, { id:1002, 类型:外部, 状态:关闭 }, { 身份证号码:1003, 类型:内部, 状态:打开 }, { 身份证号码:1004, 类型:内部, 状态:打开 } ] 现在,我们需要输出id>1001的过滤数据,并键入:“外部”或状态:“打开” [ { id:1002, 类型:外部, 状态:关闭 }, { 身份证号码:1003, 类型:内

如何使用java动态过滤数据,假设我们有map/json数组的数据列表,而没有pojo映射

[ { id:1001, 类型:内部, 状态:关闭 }, { id:1002, 类型:外部, 状态:关闭 }, { 身份证号码:1003, 类型:内部, 状态:打开 }, { 身份证号码:1004, 类型:内部, 状态:打开 } ] 现在,我们需要输出id>1001的过滤数据,并键入:“外部”或状态:“打开”

[ { id:1002, 类型:外部, 状态:关闭 }, { 身份证号码:1003, 类型:内部, 状态:打开 }, { 身份证号码:1004, 类型:内部, 状态:打开 } ]
如何实现这一目标,有什么建议吗?

您可以通过以下方法实现这一目标:-

将json转换为字符串 构造JSONArray>>JSONArray JSONArray=新的JSONArrayconverted_json_字符串 从JsonArray中拉出jsonArrayObject并构造一个列表 使用Collections.sort方法并在其中的JSON键上部署比较逻辑 并构造排序后的json。
试试这段代码,我假设你有一个对象列表

List<YourCLass> filteredList = list
                    .stream()
                    .filter(obj -> obj.getId() > 1001 && (obj.getStatus().equals("Open") || obj.getType().equals("External")))
                    .collect(Collectors.toList());
在pom.xml中添加此依赖项,或下载库并将其添加到库中

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
</dependency>

使用JSON路径,下面是我作为示例发布的几个JSONPath查询


注意:-对于操作>或我们可以使用javascript功能来解决条件,URID应该是Integer类型。我们可以使用Java ScriptEngineManager运行javascript表达式: 表达式可以是type='Internal'和status='Open' 私有字符串getResultString表达式{ ScriptEngineManager管理器=新ScriptEngineManager; ScriptEngine=manager.getEngineByNameJavaScript; 试一试{ 返回engine.evalexpression.toString; }捕获异常e{ } 返回null;
}我说我很困惑,你想从原始json中提取数据吗?从对象列表中选择对象的数据库?您尝试了什么?您在哪里遇到了问题?@S\R已经发布了一个答案,看看这是否是您所要求的。需要在没有POJO映射的情况下实现这一点。有可能的话,试试这个。这就是解决方案。
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
</dependency>
public static void main(String[] args) {
    String jsonData = "[\r\n" + 
            "  {\r\n" + 
            "    \"id\": 1001,\r\n" + 
            "    \"type\": \"Internal\",\r\n" + 
            "    \"status\": \"Closed\"\r\n" + 
            "  },\r\n" + 
            "  {\r\n" + 
            "    \"id\": 1002,\r\n" + 
            "    \"type\": \"External\",\r\n" + 
            "    \"status\": \"Closed\"\r\n" + 
            "  },\r\n" + 
            "  {\r\n" + 
            "    \"id\": 1003,\r\n" + 
            "    \"type\": \"Internal\",\r\n" + 
            "    \"status\": \"Open\"\r\n" + 
            "  },\r\n" + 
            "  {\r\n" + 
            "    \"id\": 1004,\r\n" + 
            "    \"type\": \"Internal\",\r\n" + 
            "    \"status\": \"Open\"\r\n" + 
            "  }\r\n" + 
            "]";
    
    String filterId = "$.[?(@.id > 1001)]"; //For Id > 1001
    String filterType =  "$.[?(@.type in ['External'])]"; //for External type
    String filterTypeAndId =  "$.[?((@.id > 1001) && (@.type in ['Internal']))]"; //for External type with Id > 1001
    String filterTypeAndId2 =  "$.[?((@.id > 1001) && (@.type in ['Internal', 'External']))]"; //for External type with Id > 1001
    DocumentContext documentContext = JsonPath.parse(jsonData);
    System.out.println(documentContext.read(filterId).toString());
    System.out.println(documentContext.read(filterType).toString());
    System.out.println(documentContext.read(filterTypeAndId).toString());
    System.out.println(documentContext.read(filterTypeAndId2).toString());
}
[{"id":1002,"type":"External","status":"Closed"},{"id":1003,"type":"Internal","status":"Open"},{"id":1004,"type":"Internal","status":"Open"}]

[{"id":1002,"type":"External","status":"Closed"}]

[{"id":1003,"type":"Internal","status":"Open"},{"id":1004,"type":"Internal","status":"Open"}]

[{"id":1002,"type":"External","status":"Closed"},{"id":1003,"type":"Internal","status":"Open"},{"id":1004,"type":"Internal","status":"Open"}]