我有 2 个数组列表,一个自定义对象的 RequestList 和 ResponseList。请求列表有 10 个带有 RequestHeader 和 RequestBody 的soap 请求。10 是一个示例(甚至可能是 1000 条或更多甚至 100 万条记录) 现在,RequestHeader(Header.java) 有一个名为 RequestId 的元素,其类型为 String请求对象<CustomClassRequest> <header> <RequestId>1</RequestId> </header> <Body></Body></CustomClassRequest>假设RequestList有10个soap请求,requestId从1到10(使用数字来简化这个用例)现在,当我收到响应时,我会并行触发这些soap 请求并释放插入订单,因为它在我的RequestList 中。因此,我的 ResponseList 将有所有这 10 个肥皂请求的响应,但 requestId 的顺序不同。响应对象<CustomClassResponse> <header> <RequestId>1</RequestId> </header> <Body></Body></CustomClassResponse>注意:响应中的标头属于不同的类 ResponseHeader.java我是否可以根据 RequestList 存在的插入顺序使用公共字段 RequestId 对我的 ResponseList 进行排序。让我知道 Java 8 API 是否有可能的解决方案,甚至使用任何第三方解决方案
2 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
您可以使用 java8 lambda 表达式
例如
resposneList.stream() .sorted((o1, o2) -> o1.getHeader().getRequestId() .compareTo(o2.getHeader().getRequestId()))`
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
您不应该使用 Comparator 因为您不比较它们之间的列表元素来计算它们的顺序。
您可以从将 id 关联到响应的响应列表中创建一个 Map。
然后流式传输请求并将其 id 映射到映射键。
这是为响应创建新列表的解决方案:
Map<Integer, Response> responseByIdMap = responses.stream() .collect(toMap(Response::getId, r->r);responses = request.stream() .map( req -> responseByIdMap.get(req.getId)) .collect(toList());
添加回答
举报
0/150
提交
取消