为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2022-07-20 10:04:08
我有 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()))`


查看完整回答
反对 回复 2022-07-20
?
一只萌萌小番薯

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());


查看完整回答
反对 回复 2022-07-20
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信