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

Java比较列表中对象的两个元素

Java比较列表中对象的两个元素

慕森卡 2021-12-10 12:31:22
我正在将列表中的一个对象转换为另一个使用流循环遍历它们的对象。    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 循环。
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

对于流来说,这并不容易。首先,您需要按以下方式对您的回复进行排序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());  


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

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