簡體   English   中英

Java比較列表中對象的兩個元素

[英]Java compare two elements of objects in a list

我正在將列表中的一個對象轉換為使用流循環遍歷它們的另一個對象。

    response.stream().map(res -> new Req(res.getId(), 
res.getStartDate(), res.getEndDate())).collect(Collectors.toList());

響應對象具有所有對象的開始日期和結束日期,我將它們設置為 Req 對象。 現在 res 對象中的記錄可能在 startdate 和 enddate 之間存在差距,我想用最后一條記錄的 enddate 和下一條/當前記錄的 startdate 填補這些差距。

前任:

startdate    enddate
 ---------   ---------
 01-01-2018  01-05-2018
 01-05-2018  01-09-2018
 01-12-2018  01-14-2018
 01-20-2018  01-25-2018

那么我的 Req 對象應該有如下記錄

startdate    enddate
 ---------   ---------
 01-01-2018  01-05-2018
 01-05-2018  01-09-2018
 01-09-2018  01-12-2018
 01-12-2018  01-14-2018
 01-14-2018  01-20-2018
 01-20-2018  01-25-2018

我想在流中添加一個 if 條件並檢查列表的當前和下一個對象並在請求中添加額外的對象。 不確定這是否可以通過這種方式實現,或者我必須使用兩個 for 循環。

這對於流來說並不容易。 首先,您需要按startDate對您的回復進行排序:

List<Response> sorted = responses.stream()
         .sorted(Comparator.comparing(Response::getStartDate))
         .collect(Collectors.toList()); 

然后創建一個從Response轉換為Request

private static Request fromResponse(Response response) {
    return new Request(response.getStartDate(), response.getEndDate(), response.getId());
} 

最后是流操作:

List<Request> req = IntStream.range(0, sorted.size())
                                 .boxed()
                                 .flatMap(x -> {
                                     if (x == responses.size() - 1) {
                                         return Stream.of(fromResponse(responses.get(x)));
                                     }
                                     Response left = responses.get(x);
                                     Response right = responses.get(x + 1);

                                     if (!left.getEndDate().equals(right.getStartDate())) {
                                         Response oneMore = new Response(
                                             left.getEndDate(),
                                             right.getStartDate(),
                                             left.getId());
                                         return Stream.of(fromResponse(left), fromResponse(oneMore));
                                     } else {
                                         return Stream.of(fromResponse(left));
                                     }
                                 })
                                 .collect(Collectors.toList());  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM