我有2个数组列表,一个自定义对象的RequestList和ResponseList。 该请求列表具有10个带有RequestHeader和RequestBody的肥皂请求。 10是一个示例(甚至可以是1000条甚至更多甚至一百万条记录) 现在,RequestHeader(Header.java)具有一个名为RequestId的元素,类型为String
请求对象
<CustomClassRequest>
<header>
<RequestId>1</RequestId>
</header>
<Body></Body>
</CustomClassRequest>
假设RequestList有10个soap请求,且requestId从1到10 (使用数字简化此用例)
现在,我并行触发这些肥皂请求并松开插入顺序 当我收到请求清单中的回复时。 因此,我的ResponseList将包含所有这10个肥皂请求的响应 但以requestId的顺序不同。
响应对象
<CustomClassResponse>
<header>
<RequestId>1</RequestId>
</header>
<Body></Body>
</CustomClassResponse>
注意:Response中的头是另一个类ResponseHeader.java
我可以使用公用字段RequestId对我的ResponseList进行排序吗 根据插入顺序确定RequestList的存在方式。
让我知道Java 8 API是否有可能的解决方案,甚至使用任何第三方解决方案
答案 0 :(得分:0)
您可以使用java8 lambda表达式
例如
resposneList.stream()
.sorted((o1, o2) -> o1.getHeader().getRequestId()
.compareTo(o2.getHeader().getRequestId()))`
答案 1 :(得分:0)
您不应该使用比较器,因为您不比较它们之间的列表元素来计算其顺序。
您可以从响应列表创建一个将ID与响应相关联的Map。
然后流式传输请求并将其ID映射到map键。
这是为响应创建新列表的解决方案:
Map<Integer, Response> responseByIdMap = responses.stream()
.collect(toMap(Response::getId, r->r);
responses =
request.stream()
.map( req -> responseByIdMap.get(req.getId))
.collect(toList());