嗨,我有一个 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
的行为。