有两个类和两个相应的清单:的Java 8流:找到基于从另一个列表中值匹配计算条件的一个列表项
class Click {
long campaignId;
Date date;
}
class Campaign {
long campaignId;
Date start;
Date end;
String type;
}
List<Click> clicks = ..;
List<Campaign> campaigns = ..;
,并希望找到所有Click
S IN clicks
是:
有相应的
Campaign
在campaigns
列表,即Campaign
具有相同campaignId
和这
Campaign
有type
= “前瞻性” 和这
Campaigns.start
<click.date
<Campaigns.end
到目前为止,我有以下实现(这似乎是混乱和复杂的给我):
clicks.
stream().
filter(click -> campaigns.stream().anyMatch(
campaign -> campaign.getCampaignType().equals("prospecting") &&
campaign.getCampaignId().equals(click.getCampaignId()) &&
campaign.getStart().after(click.getDate()) &&
campaign.getEnd().before(click.getDate()))).
collect(toList());
我想知道问题是否有更简单的解决方案。
我认为你真正需要做的就是将更大的lambda提取到一个命名方法中。 –
@JoeC这真的有可能吗?这个lambda是指点击和广告系列,这意味着我将需要使用BiPredicate,而过滤器接受Predicate –
'点击 - > checkCampaigns(点击,广告系列)' –