Eclipse 为什么我的调试断点没有影响我的lamda函数(java)?
大家好,我有一个SpringBootJava应用程序,我正在使用eclipse。我使用的是java streams,我在一个lambda函数上放置了一个断点。 例如,在下面的代码中,我在行上放置了一个断点 System.out.println(“筛选器请求开始日期”+filterRequest.getRangeStartDate());但它没有击中这里。知道我该怎么办吗Eclipse 为什么我的调试断点没有影响我的lamda函数(java)?,eclipse,java-8,Eclipse,Java 8,大家好,我有一个SpringBootJava应用程序,我正在使用eclipse。我使用的是java streams,我在一个lambda函数上放置了一个断点。 例如,在下面的代码中,我在行上放置了一个断点 System.out.println(“筛选器请求开始日期”+filterRequest.getRangeStartDate());但它没有击中这里。知道我该怎么办吗 @Override public List<DropdownDTO> findAll(Messag
@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;
}
@覆盖
公共列表findAll(MessageHistoryActivityFilterRequestFilter){
列出活动=活动存储库.findAll();
List filteredResults=活动。流()
.过滤器(getFilterPredicate(过滤器))
.collect(Collectors.toCollection(LinkedList::new));
返回filteredResults.stream()
.sorted(Comparator.comparing(活动::getStartDate))
.map(活动映射器::toDropdownDTO)
.collect(toList());
}
受保护的谓词getFilterPredicate(MessageHistoryCampaignFilterRequest filterRequest){
谓词=活动->真;
如果(filterRequest.GetAccountId()!=null&&!filterRequest.GetAccountId().isEmpty()){
和(campaign->filterRequest.getAccountIds().contains(campaign.getAccount());
}
if(filterRequest.getActivationStatuses()!=null&&!filterRequest.getActivationStatuses().isEmpty()){
和(campaign->filterRequest.getcampaignstatus().contains(campaign.getStatus());
}
谓词和(活动->
{
System.out.println(“筛选器请求开始日期”+filterRequest.getRangeStartDate());
System.out.println(“筛选请求结束日期”+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());
}
);
返回谓词;
}
谢谢你的帮助
谢谢请注意:
返回一个组合谓词,该谓词表示此谓词和另一个谓词的短路逻辑AND
强调回报
因此,当您像p1.和(p2)
那样调用它时,它不会改变p1
或p2
的行为,而是返回一个由两个谓词组成的新谓词
因此,您必须在代码中将
谓词和(…)
调用替换为谓词=谓词。和(…)
,以改变后续使用谓词的行为,您忽略了谓词的结果。和(…)
但使用原始谓词。连续三次。是的,这是正确答案。我可以接受你的回答,如果你张贴它。非常感谢。