Java中如何高效从List按路径移除指定对象?
问题:从列表中移除路径匹配的元素
我定义了如下两个列表:
private final List<EventTeaserModel> events = new ArrayList<>(); private final List<EventTeaserModel> premiumEventList = new ArrayList<>();
需要实现removePremiumEventsFromEvents()方法,完成的功能是:从events列表中移除所有与premiumEventList里对象路径相同的元素(路径通过event.getResource().getPath()获取)。
以下是我已经实现且可以正常运行的代码,想请教在Java中有没有更优的实现方式?
private void removePremiumEventsFromEvents() { for (EventTeaserModel premiumEvent: premiumEventList) { List<EventTeaserModel> findDuplicatedEvent = events.stream() .filter(event -> event.getResource().getPath().equals(premiumEvent.getResource().getPath())) .collect(Collectors.toList()); events.removeAll(findDuplicatedEvent); } }
感谢@Chaosfire、@Thomas和@marstran的帮助,我已经对方法做了优化,优化后的代码如下:
private void removePremiumEventsFromEvents() { final Set<String> paths = premiumEventList.stream() .map(EventTeaserModel::getResource) .map(Resource::getPath) .collect(Collectors.toSet()); List<EventTeaserModel> duplicatedEvents = events.stream() .filter(event -> paths.contains(event.getResource().getPath())) .collect(Collectors.toList()); events.removeAll(duplicatedEvents); }
内容的提问来源于stack exchange,提问作者scura s
相关产品推荐
相关产品推荐

