You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:32:00