为什么我的调试断点没有命中我的 lamda 函数 (Java)?



嗨,我有一个 Spring boot java 应用程序,我正在使用 eclipse。我正在使用 java 流,并且正在我的一个 lambda 函数上放置一个断点。 例如,在下面的代码中,我将断点放在行上 System.out.println("filter request start date" + 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的文档:

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

重视回报

因此,当你像p1.and(p2)一样称呼它时,它不会改变p1的行为,也不会改变p2而是返回一个新的谓词,该谓词是两个谓词的组合。

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

相关内容

最新更新