亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用自定義對象的另一個 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 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號