猿问

使用自定义对象的另一个 ArrayList 字段对 ArrayList 进行排序

我有 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 是否有可能的解决方案,甚至使用任何第三方解决方案


UYOU
浏览 82回答 2
2回答

杨__羊羊

您可以使用 java8 lambda 表达式例如resposneList.stream() &nbsp;&nbsp;&nbsp;.sorted((o1,&nbsp;o2)&nbsp;->&nbsp;o1.getHeader().getRequestId() &nbsp;&nbsp;&nbsp;.compareTo(o2.getHeader().getRequestId()))`

一只萌萌小番薯

您不应该使用 Comparator 因为您不比较它们之间的列表元素来计算它们的顺序。您可以从将 id 关联到响应的响应列表中创建一个 Map。然后流式传输请求并将其 id 映射到映射键。这是为响应创建新列表的解决方案:Map<Integer,&nbsp;Response>&nbsp;responseByIdMap&nbsp;=&nbsp;responses.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(toMap(Response::getId,&nbsp;r->r);responses&nbsp;=&nbsp;request.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(&nbsp;req&nbsp;->&nbsp;responseByIdMap.get(req.getId)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(toList());
随时随地看视频慕课网APP

相关分类

Java
我要回答