dataList.stream().collect(Collectors.groupingBy(productExcel -> productExcel.getProductId(), Collectors.counting()))
时间: 2024-04-25 22:24:37 浏览: 118
这段代码使用了Java 8的流式操作和Collectors类来对dataList进行分组并计数。具体来说,它按照productExcel对象的productId属性进行分组,并统计每个分组中的元素数量。
首先,dataList.stream()将List转换为一个流,然后使用collect方法进行收集操作。groupingBy方法接受两个参数,第一个参数是一个Function,用于提取productExcel对象的productId作为分组依据;第二个参数是一个Collector,这里使用了Collectors.counting()来统计每个分组中的元素数量。
最终,这段代码将返回一个Map对象,其中键是productId,值是对应分组中元素的数量。
注意:在使用这段代码之前,请确保dataList中的元素不为null,且productExcel对象的getProductId方法返回的值正确。否则可能会抛出NullPointerException或产生错误的结果。
相关问题
List<WorkOrderResponse> dataList = myData.getList();根据workOrderNum字段进行分组
当你有一个`List<WorkOrderResponse>`类型的列表,其中每个`WorkOrderResponse`对象包含一个`workOrderNum`字段,你可以使用Java 8的Stream API或者Collections框架来按这个字段进行分组。这里我们假设`workOrderNum`是一个可以作为比较键的属性。
例如,如果你想要按照`workOrderNum`值将工作订单分组到Map中,每个key对应一个workOrderNum,value是一个包含该workOrderNum的所有响应的集合,你可以这样做:
```java
Map<Integer, List<WorkOrderResponse>> groupedData = dataList.stream()
.collect(Collectors.groupingBy(WorkOrderResponse::getWorkOrderNum));
```
这会创建一个新的`Map`,其中键是`workOrderNum`的值,值是具有相同`workOrderNum`的所有`WorkOrderResponse`对象的列表。
如果你想得到的是每个group的总数量,你可以使用`Collectors.counting()`方法:
```java
Map<Integer, Long> countGroups = dataList.stream()
.collect(Collectors.groupingBy(WorkOrderResponse::getWorkOrderNum, Collectors.counting()));
```
现在,`countGroups`就是每个`workOrderNum`对应的订单总数。
[{"name":"电动车","uuid":"6481c39a-cf81-4dc7-adf5-768600b79ca2","task_type":"others","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-22T04:12:17.558902Z","end_at":"2025-04-22T04:15:12.558902Z","run_at":"2025-04-22T04:12:18.082991Z","completed_at":"2025-04-22T04:14:40.463417Z","wayline_uuid":"ca82f9aa-d84d-4442-8c04-6b2624ed8785","folder_id":103208520,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"周公宅水库Dock3_试飞_","uuid":"958247fa-79d1-4ff7-a4f3-6c166cbba353","task_type":"others","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-22T04:15:36.727596Z","end_at":"2025-04-22T04:18:31.727596Z","run_at":"2025-04-22T04:15:37.257142Z","completed_at":"2025-04-22T04:17:17.895556Z","wayline_uuid":"d8fa9e84-372e-4b15-9945-f63dcbb2bc06","folder_id":103209719,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"测试","uuid":"5839368d-49a5-4bee-bcb0-f3112e34488a","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-28T03:00:30.774486Z","end_at":"2025-04-28T03:21:25.774486Z","run_at":"2025-04-28T03:00:31.54974Z","completed_at":"2025-04-28T03:10:05.496577Z","wayline_uuid":"1945caf2-29b2-4412-8873-9658daf64a72","folder_id":105310359,"current_waypoint_index":6,"total_waypoints":14,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322283,"message":"","happen_at":"2025-04-28T03:10:05.207Z","sn":"8UUXN4300A04KQ"}]},{"name":"测试","uuid":"34d200ce-b5b7-4189-891c-d37deaede4e1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-28T06:17:37.606129Z","end_at":"2025-04-28T06:23:11.606129Z","run_at":"2025-04-28T06:17:38.314235Z","completed_at":"2025-04-28T06:22:43.526046Z","wayline_uuid":"e161f37a-b375-46b8-8f8e-6cce9c6596b7","folder_id":105438837,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"西线测试","uuid":"fb3ebf52-90ad-4502-8a0a-85f4ae69703b","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-28T09:07:11.688223Z","end_at":"2025-04-28T09:31:46.688223Z","run_at":"2025-04-28T09:07:12.315805Z","completed_at":"2025-04-28T10:20:38.683861Z","wayline_uuid":"49aee269-bf04-453d-a442-db025e788175","folder_id":105551695,"current_waypoint_index":27,"total_waypoints":37,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":514109,"message":"","happen_at":"2025-04-28T10:20:36.579Z","sn":"8UUXN4300A04KQ"}]},{"name":"新建计划","uuid":"2c884d02-24b0-4707-865e-6f958c79d40b","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-30T02:54:32.978043Z","end_at":"2025-04-30T03:08:45.978043Z","run_at":"2025-04-30T02:54:33.677278Z","completed_at":"2025-04-30T03:05:53.118946Z","wayline_uuid":"4cb4e902-719e-4d0a-9ce3-a7e39c500e12","folder_id":106088697,"current_waypoint_index":41,"total_waypoints":90,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-04-30T03:05:52.814Z","sn":"8UUXN4300A04KQ"}]},{"name":"西线试飞","uuid":"6f6d04df-35cf-4bf7-8069-f2cf8dc5f590","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T01:49:52.991036Z","end_at":"2025-05-06T02:14:53.991036Z","run_at":"2025-05-06T01:49:53.731424Z","completed_at":"2025-05-06T02:06:06.734273Z","wayline_uuid":"ccccd12a-f268-45a9-8e15-1b244a50570a","folder_id":107360803,"current_waypoint_index":21,"total_waypoints":37,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-06T02:06:06.307Z","sn":"8UUXN4300A04KQ"}]},{"name":"西线试飞","uuid":"bb4f5c65-8ee6-49f1-b612-6af480c9012d","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T02:25:39.852123Z","end_at":"2025-05-06T02:50:53.852124Z","run_at":"2025-05-06T02:25:40.465033Z","completed_at":"2025-05-06T02:52:34.298717Z","wayline_uuid":"a1a1a6fe-4fae-4cc7-b7fd-1b2cb73db72f","folder_id":107383238,"current_waypoint_index":37,"total_waypoints":37,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划1","uuid":"527df17d-7318-4077-ac05-c5cacd6bdb23","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T05:41:58.61404Z","end_at":"2025-05-06T05:48:10.61404Z","run_at":"2025-05-06T05:41:59.366263Z","completed_at":"2025-05-06T05:47:57.534047Z","wayline_uuid":"918bd2c5-267d-4799-b74c-f0b670a6da47","folder_id":107485453,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划2","uuid":"f1056331-2df3-4298-8590-ce84fd7ad1f1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T05:53:58.913798Z","end_at":"2025-05-06T05:59:47.913798Z","run_at":"2025-05-06T05:53:59.598749Z","completed_at":"2025-05-06T05:59:07.58325Z","wayline_uuid":"2048a83a-330a-4c64-9a28-67f88ed65f12","folder_id":107491697,"current_waypoint_index":3,"total_waypoints":3,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划3","uuid":"f3549dc0-e58e-4b19-963d-fc488676f937","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T07:04:29.910609Z","end_at":"2025-05-06T07:25:11.91061Z","run_at":"2025-05-06T07:04:30.727084Z","completed_at":"2025-05-06T07:10:47.84156Z","wayline_uuid":"4dd1bc86-9e4a-4181-a63a-688f4c34d05f","folder_id":107524087,"current_waypoint_index":0,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-06T07:10:47.333Z","sn":"8UUXN4300A04KQ"}]},{"name":"新建计划4","uuid":"fd46c482-e465-403b-a3af-726144859cb1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T07:33:39.677309Z","end_at":"2025-05-06T07:54:21.677309Z","run_at":"2025-05-06T07:33:40.183554Z","completed_at":"2025-05-06T07:53:49.815933Z","wayline_uuid":"66bcfb4a-8e83-4286-9f6c-df567e8b30ca","folder_id":107543205,"current_waypoint_index":38,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"倾斜摄影","uuid":"4ddbd645-18f5-42b9-8503-d71f6753a6f7","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T05:53:15.140342Z","end_at":"2025-05-07T06:07:14.140342Z","run_at":"2025-05-07T05:53:15.859281Z","completed_at":"2025-05-07T06:12:49.672755Z","wayline_uuid":"df1d2b60-9035-41b3-bc67-44a97479a609","folder_id":107959826,"current_waypoint_index":89,"total_waypoints":89,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划5","uuid":"6468ec0b-3711-4b41-be09-d35143d63801","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T07:03:39.474944Z","end_at":"2025-05-07T07:19:01.474944Z","run_at":"2025-05-07T07:03:40.228491Z","completed_at":"2025-05-07T07:18:50.284827Z","wayline_uuid":"00f2aa27-6932-42df-855c-59f4d7948f59","folder_id":107991625,"current_waypoint_index":23,"total_waypoints":23,"media_upload_status":"to_upload","resumable_status":"auto","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划6","uuid":"335bf28a-91b4-4f83-b396-4f045f062ab1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T07:19:44.590593Z","end_at":"2025-05-07T07:32:02.590594Z","run_at":"2025-05-07T07:19:45.409777Z","completed_at":"2025-05-07T07:30:01.399891Z","wayline_uuid":"8b5d25f5-c444-43e8-9d88-c42e2816e83b","folder_id":108000234,"current_waypoint_index":21,"total_waypoints":21,"media_upload_status":"to_upload","resumable_status":"auto","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划7","uuid":"21b3af6c-68d4-4eb0-b86c-2c5f154a9425","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T07:51:13.382971Z","end_at":"2025-05-07T08:04:13.382972Z","run_at":"2025-05-07T07:51:14.076944Z","completed_at":"2025-05-07T08:03:12.298899Z","wayline_uuid":"44f0a3d7-f13b-4e1e-a6dd-0207da658545","folder_id":108019568,"current_waypoint_index":23,"total_waypoints":24,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-07T08:03:11.902Z","sn":"8UUXN4300A04KQ"}]},{"name":"新建计划8","uuid":"387d812a-903b-4cb7-97e0-1ee8b38727c7","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T08:18:33.725043Z","end_at":"2025-05-07T08:24:05.725043Z","run_at":"2025-05-07T08:18:34.523417Z","completed_at":"2025-05-07T08:23:29.028929Z","wayline_uuid":"7c716532-6146-4db8-903d-a6207b1aca67","folder_id":108037466,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划9","uuid":"64036866-dadc-4cb7-ace0-2104dddee2a1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T09:14:59.870035Z","end_at":"2025-05-07T09:20:31.870035Z","run_at":"2025-05-07T09:15:00.557724Z","completed_at":"2025-05-07T09:19:58.54438Z","wayline_uuid":"646ae885-b6c9-43cd-b389-eae771d65bb9","folder_id":108068470,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝左","uuid":"35b03b9c-fee6-4350-bd91-001718af0edf","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-08T08:01:32.033414Z","end_at":"2025-05-08T08:11:56.033414Z","run_at":"2025-05-08T08:01:32.779982Z","completed_at":"2025-05-08T08:04:07.231975Z","wayline_uuid":"f579b0fd-cbd7-4d84-b8ae-73dea3841b51","folder_id":108364880,"current_waypoint_index":0,"total_waypoints":24,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-08T08:04:05.946Z","sn":"8UUXN4300A04KQ"}]},{"name":"大坝至门卫","uuid":"a74a67e8-fcef-4c6d-9b20-6a968fcc9c84","task_type":"immediate","status":"starting_failure","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T05:54:53.117137Z","end_at":"2025-05-12T06:07:35.117137Z","run_at":"2025-05-12T05:54:53.195528Z","completed_at":null,"wayline_uuid":"5a1aa016-ef52-4e49-a357-fabf2f15b77c","folder_id":0,"current_waypoint_index":0,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":219102,"message":"","happen_at":"2025-05-12T05:54:53.200434Z","sn":"8UUXN4300A04KQ"}]},{"name":"大坝至门卫","uuid":"21e45cd0-4e56-410b-a9ea-07a16af5f3c9","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T06:28:27.242445Z","end_at":"2025-05-12T06:41:09.242445Z","run_at":"2025-05-12T06:28:27.928504Z","completed_at":"2025-05-12T06:37:44.329636Z","wayline_uuid":"d2809922-4156-4940-a878-2ae8e1e4a47a","folder_id":109500588,"current_waypoint_index":21,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-12T06:37:43.84Z","sn":"8UUXN4300A04KQ"}]},{"name":"大坝至门卫","uuid":"027458d0-df2c-441d-b582-73c05dd7ab4c","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T06:51:14.430078Z","end_at":"2025-05-12T07:08:41.430078Z","run_at":"2025-05-12T06:51:15.708585Z","completed_at":"2025-05-12T07:07:02.526273Z","wayline_uuid":"48234957-8af7-489d-a00f-f83f4c341186","folder_id":109514706,"current_waypoint_index":38,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"下游","uuid":"56ea6657-b5f5-4741-810a-d9e81f2ad070","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T07:34:35.607609Z","end_at":"2025-05-12T08:01:21.60761Z","run_at":"2025-05-12T07:34:36.276991Z","completed_at":"2025-05-12T07:59:52.351712Z","wayline_uuid":"e38ec342-b9f4-4415-b6ff-485634eba879","folder_id":109544124,"current_waypoint_index":40,"total_waypoints":40,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝左","uuid":"3e749dc4-031a-4e2f-9c05-60c8d6f8f621","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T08:31:39.043317Z","end_at":"2025-05-12T08:41:49.043317Z","run_at":"2025-05-12T08:31:39.990588Z","completed_at":"2025-05-12T08:41:23.079079Z","wayline_uuid":"ac67ff24-a4f5-4e9d-b805-20c01a2e9fb3","folder_id":109582494,"current_waypoint_index":24,"total_waypoints":24,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝裂缝","uuid":"e881550e-9753-4381-b2b9-7f73fb26f145","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-14T07:55:30.20398Z","end_at":"2025-05-14T08:13:21.203981Z","run_at":"2025-05-14T07:55:30.890041Z","completed_at":"2025-05-14T08:09:11.389109Z","wayline_uuid":"3eafff2c-539a-43d8-b39b-c0de7edded07","folder_id":110515488,"current_waypoint_index":42,"total_waypoints":42,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝裂缝1","uuid":"a8fe035d-22b9-4c02-b75e-849f9949bb27","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-14T08:19:03.277083Z","end_at":"2025-05-14T08:24:54.277083Z","run_at":"2025-05-14T08:19:04.038062Z","completed_at":"2025-05-14T08:23:49.57025Z","wayline_uuid":"b431c035-43b7-4b6a-9527-6fbddfd06eb2","folder_id":110535864,"current_waypoint_index":6,"total_waypoints":6,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null}] 这是返回的结果
从你的问题描述来看,你希望对返回的 JSON 数据进行处理。以下是几个可能的任务目标及解决方案:
### 任务目标
1. **提取特定字段**:例如提取 `name`、`status` 和 `completed_at` 等字段。
2. **过滤数据**:例如只保留 `status` 为 `success` 的记录。
3. **统计信息**:例如统计不同 `status` 的数量。
---
### 解决方案
以下是一个完整的 Java 实现,使用 Jackson 库解析 JSON 数据并完成上述任务。
#### 代码实现
```java
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class JsonProcessingExample {
public static void main(String[] args) throws IOException {
// 模拟API返回的JSON字符串
String res = "[{\"name\":\"电动车\",\"uuid\":\"6481c39a-cf81-4dc7-adf5-768600b79ca2\",\"task_type\":\"others\",\"status\":\"success\",\"sn\":\"8UUXN4300A04KQ\",\"landing_dock_sn\":\"\",\"begin_at\":\"2025-04-22T04:12:17.558902Z\",\"end_at\":\"2025-04-22T04:15:12.558902Z\",\"run_at\":\"2025-04-22T04:12:18.082991Z\",\"completed_at\":\"2025-04-22T04:14:40.463417Z\",\"wayline_uuid\":\"ca82f9aa-d84d-4442-8c04-6b2624ed8785\",\"folder_id\":103208520,\"current_waypoint_index\":2,\"total_waypoints\":2,\"media_upload_status\":\"upload_finished\",\"resumable_status\":\"manual\",\"is_break_point_resume\":false,\"operations\":null,\"exceptions\":null},{\"name\":\"周公宅水库Dock3_试飞_\",\"uuid\":\"958247fa-79d1-4ff7-a4f3-6c166cbba353\",\"task_type\":\"others\",\"status\":\"success\",\"sn\":\"8UUXN4300A04KQ\",\"landing_dock_sn\":\"\",\"begin_at\":\"2025-04-22T04:15:36.727596Z\",\"end_at\":\"2025-04-22T04:18:31.727596Z\",\"run_at\":\"2025-04-22T04:15:37.257142Z\",\"completed_at\":\"2025-04-22T04:17:17.895556Z\",\"wayline_uuid\":\"d8fa9e84-372e-4b15-9945-f63dcbb2bc06\",\"folder_id\":103209719,\"current_waypoint_index\":2,\"total_waypoints\":2,\"media_upload_status\":\"upload_finished\",\"resumable_status\":\"manual\",\"is_break_point_resume\":false,\"operations\":null,\"exceptions\":null}]";
// 使用Jackson解析JSON数据
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(res);
// 将JsonNode转换为List<Map>
List<Map<String, Object>> dataList = objectMapper.readValue(
rootNode.toString(),
new TypeReference<List<Map<String, Object>>>() {}
);
// 提取特定字段
List<Map<String, Object>> extractedData = dataList.stream()
.map(item -> Map.of(
"name", item.get("name"),
"status", item.get("status"),
"completed_at", item.get("completed_at")
))
.collect(Collectors.toList());
// 打印提取后的数据
System.out.println("提取特定字段的结果:");
extractedData.forEach(System.out::println);
// 过滤数据 (只保留 status 为 success 的记录)
List<Map<String, Object>> filteredData = dataList.stream()
.filter(item -> "success".equals(item.get("status")))
.collect(Collectors.toList());
// 打印过滤后的数据
System.out.println("\n过滤后的数据 (status 为 success):");
filteredData.forEach(System.out::println);
// 统计不同 status 的数量
Map<String, Long> statusCount = dataList.stream()
.collect(Collectors.groupingBy(item -> (String) item.get("status"), Collectors.counting()));
// 打印统计结果
System.out.println("\n不同 status 的数量统计:");
statusCount.forEach((status, count) -> System.out.println(status + ": " + count));
}
}
```
---
### 代码解释
1. **解析 JSON 数据**:
- 使用 `ObjectMapper` 的 `readTree()` 方法将 JSON 字符串解析为 `JsonNode`。
- 再通过 `objectMapper.readValue()` 将 `JsonNode` 转换为 `List<Map<String, Object>>`。
2. **提取特定字段**:
- 使用 `Stream` 流式操作对每个元素进行映射,提取需要的字段(如 `name`、`status` 和 `completed_at`)。
- 使用 `Map.of()` 创建新的键值对。
3. **过滤数据**:
- 使用 `Stream.filter()` 方法保留 `status` 为 `success` 的记录。
4. **统计信息**:
- 使用 `Collectors.groupingBy()` 对 `status` 进行分组,并统计每个状态的数量。
---
### 输出结果
假设输入的 JSON 数据为上述内容,程序输出如下:
#### 提取特定字段的结果:
```
{name=电动车, status=success, completed_at=2025-04-22T04:14:40.463417Z}
{name=周公宅水库Dock3_试飞_, status=success, completed_at=2025-04-22T04:17:17.895556Z}
```
#### 过滤后的数据 (status 为 success):
```
{name=电动车, uuid=6481c39a-cf81-4dc7-adf5-768600b79ca2, task_type=others, status=success, sn=8UUXN4300A04KQ, landing_dock_sn=, begin_at=2025-04-22T04:12:17.558902Z, end_at=2025-04-22T04:15:12.558902Z, run_at=2025-04-22T04:12:18.082991Z, completed_at=2025-04-22T04:14:40.463417Z, wayline_uuid=ca82f9aa-d84d-4442-8c04-6b2624ed8785, folder_id=103208520, current_waypoint_index=2, total_waypoints=2, media_upload_status=upload_finished, resumable_status=manual, is_break_point_resume=false, operations=null, exceptions=null}
{name=周公宅水库Dock3_试飞_, uuid=958247fa-79d1-4ff7-a4f3-6c166cbba353, task_type=others, status=success, sn=8UUXN4300A04KQ, landing_dock_sn=, begin_at=2025-04-22T04:15:36.727596Z, end_at=2025-04-22T04:18:31.727596Z, run_at=2025-04-22T04:15:37.257142Z, completed_at=2025-04-22T04:17:17.895556Z, wayline_uuid=d8fa9e84-372e-4b15-9945-f63dcbb2bc06, folder_id=103209719, current_waypoint_index=2, total_waypoints=2, media_upload_status=upload_finished, resumable_status=manual, is_break_point_resume=false, operations=null, exceptions=null}
```
#### 不同 status 的数量统计:
```
success: 2
```
---
###
阅读全文
相关推荐









