【问题标题】:why is my debug break point not hitting on my lamda function (java)?为什么我的调试断点没有命中我的 lambda 函数(java)?
【发布时间】:2019-09-02 22:58:19
【问题描述】:

您好,我正在使用 Spring Boot Java 应用程序,并且正在使用 Eclipse。我正在使用 java 流,并且在我的一个 lambda 函数上放置了一个断点。 例如在下面的代码中,我在行上放了一个断点 System.out.println("过滤请求开始日期" + filterRequest.getRangeStartDate());但它没有打到这里。知道我该怎么做吗?

    @Override
    public List<DropdownDTO> findAll(MessageHistoryCampaignFilterRequest filter) {

        List<Campaign> campaigns = campaignRepository.findAll();

        List<Campaign> filteredResults = campaigns.stream()

                .filter(getFilterPredicate(filter))

                .collect(Collectors.toCollection(LinkedList::new));

        return filteredResults.stream()

                .sorted(Comparator.comparing(Campaign::getStartDate))

                .map(campaignMapper::toDropdownDTO)

                .collect(toList()); 
}


    protected Predicate<Campaign> getFilterPredicate(MessageHistoryCampaignFilterRequest filterRequest) {

        Predicate<Campaign> predicate = campaign -> true;

        if(filterRequest.getAccountIds() != null && !filterRequest.getAccountIds().isEmpty()) {

            predicate.and( campaign -> filterRequest.getAccountIds().contains(campaign.getAccount())  );

        }

        if(filterRequest.getCampaignStatuses() != null && !filterRequest.getCampaignStatuses().isEmpty()) {

            predicate.and( campaign -> filterRequest.getCampaignStatuses().contains(campaign.getStatus()) );

        }


        predicate.and( campaign ->

        {

        System.out.println("filter request start date" + filterRequest.getRangeStartDate());

        System.out.println("filter request end date" + filterRequest.getRangeEndDate());

        System.out.println( campaign.getStartDate().isAfter(filterRequest.getRangeStartDate()) && campaign.getStartDate().isBefore(filterRequest.getRangeEndDate()) );

        System.out.println(  campaign.getEndDate().isAfter(filterRequest.getRangeStartDate()) && campaign.getEndDate().isBefore(filterRequest.getRangeEndDate()) );

        return ( campaign.getStartDate().isAfter(filterRequest.getRangeStartDate()) && campaign.getStartDate().isBefore(filterRequest.getRangeEndDate()))  ||

               ( campaign.getEndDate().isAfter(filterRequest.getRangeStartDate())&& campaign.getEndDate().isBefore(filterRequest.getRangeEndDate()));

        }

        );

        return predicate;
    }

感谢任何帮助 谢谢

【问题讨论】:

  • 您忽略了predicate.and(…) 的结果,但使用了原始predicate。连续三次。
  • 是的,这是正确的答案。如果您发布它,我可以接受您的回答。谢谢

标签: eclipse java-8


【解决方案1】:

注意documentation of Predicate.and

返回一个组合谓词,表示此谓词与另一个谓词的短路逻辑与。

强调回报

因此,当您将其称为 p1.and(p2) 时,它不会改变 p1p2 的行为,而是返回一个由两个谓词组合而成的新谓词。

因此,您必须在代码中将 predicate.and(…) 调用替换为 predicate = predicate.and(…),以改变后续使用 predicate 的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多