我想在这个json中循环,并在状态被标记的地方停止,同时获取id的值。这是我目前所做的。有人能帮我弄清楚如何做到这一点吗?通过这个方法,我能够停止循环,并在状态被"标记"的地方返回true,但问题是我还想从状态被"标记"的地方返回id的值。
- 儿子:**
{
"message": "Multiple_number",
"listOfId": [
{
"Id": "7895953453",
"aliasName": "",
"status": "Active"
},
{
"Id": "9045451400",
"aliasName": "",
"status": "tagged"
},
{
"Id": "8923688789",
"aliasName": "",
"status": "Pending"
}
],
"status": "FAILURE"
}
- 代码:**
HashMap<String, Object> json = parser.object();
if (json.containsKey("listOfId")) {
ObjectMapper objectMapper = new ObjectMapper();
StatusResponseCO mobileDcResponseDto =
objectMapper.readValue(responseEntity, StatusResponseCO.class);
List<StatusResponseSubCO> statusResponseCOS = mobileDcResponseDto.getListOfId();
Map<String, Long> counting = statusResponseCOS.stream().collect(
Collectors.groupingBy(StatusResponseSubCO::getStatus, Collectors.counting()));
System.out.println(counting);
for (Map.Entry<String, Long> entry : counting.entrySet()) {
String status = entry.getKey();
if ("Tagged".equals(status)) {
return true;
}
}
- 状态响应CO. java**
public class StatusResponseCO {
private List<StatusResponseSubCO> listOfId;
}
- 状态响应子公司. java**
public class StatusResponseSubCO {
private String Id;
private String status;
}
2条答案
按热度按时间svmlkihl1#
所以我创建了一个runnable example for you(也包含了完整的源代码),其要点就是将反序列化后的列表传递给这个方法:
循环遍历列表(也可以用一个老的for循环来完成),过滤掉所有不匹配 predicate 的内容,然后收集结果并将其转换为列表;
如果您100%确定原始列表中只能有一个匹配项,那么您当然可以向结果列表中添加一个
.get(0)
以获得单个StatusResponseSubCO
示例,并通过该示例获得id
。当然,您可以做很多改进:
record
类型(Java 14)Streams.toList()
进行一些简化(Java 16)hgc7kmma2#
你的代码假设有一条记录是“标记的”,所以我也做同样的假设。你已经把JSON转换成了数据类型,并且当你调用这个函数时,你已经有了记录列表。
因此,您应该能够迭代此List,找到状态为“tagged”的记录并返回该记录的ID。以下示例假定找不到匹配记录是一种不良状态,并引发某种异常。如果合理,您可以返回null。
使用流API。
您还可以使用常规for循环