如何根据 JSONArray
的值过滤列表?
JSONArray
具有简单 json 结构的元素,带有键和值。
JSONArray
来自包 org.json
并使用此依赖项
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180130</version>
</dependency>
当我到达端点时得到的字符串响应以这种方式解析
String response = [{"ID": 1,"updatedAt": "2019-04-12T09:09:48"},{"ID": 2,"updatedAt": "2019-04-12T09:09:48"}
JSONArray jsonArray = new JSONArray(response)
我要过滤的列表由 json 字符串列表 List<String> eventDataSetList
组成
现在如何使用键 ID
的值过滤列表来自jsonArray
有比这更好的方式吗?
这是我到目前为止所做的,但我真的不想使用嵌套循环:
Map<Object, String> filteredEvents = new HashMap<>();
for (String event : eventDataSetList) {
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
if (event.contains(jsonObject.getString("ID"))) {
filteredEvents.put(jsonObject, event);
}
}
}
最佳答案
您可以使用 Java Stream API:
Map<JSONObject, String> filteredEvents = StreamSupport.stream(jsonArray.spliterator(), false).map(o -> (JSONObject) o)
.flatMap(o -> eventDataSetList.stream().filter(e -> e.contains(o.getString("ID"))).map(e -> new AbstractMap.SimpleEntry<>(o, e)))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
这会创建一个 Stream,它会迭代 JSON 数组中的所有元素并查找与条件 event.contains(jsonObject.getString("ID"))
匹配的所有事件。 。最后它们被收集到 map 中。
关于java - 如何根据 JsonArray 中的键值过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654584/