【问题标题】:What is the best way to remove an object from a list if the ID for it isn't in a list of IDs?如果对象的 ID 不在 ID 列表中,从列表中删除对象的最佳方法是什么?
【发布时间】:2018-03-04 11:35:01
【问题描述】:

我有一个对象列表,每个对象都有一个 ID。我有第二个列表,它只是媒体 ID 的列表。我想从第一个列表中删除与第二个列表中包含的 mediaID 不匹配的对象。什么是解决这个问题的有效方法?我能想到的唯一方法是嵌套 for 循环,但这似乎效率低下。

这是我的实现。请注意,“items”是第一个列表,包含 MediaDetailsItem 对象,其中每个对象都有一个特定的 mediaId。第二个列表是 mediaIds。

List<MediaDetailsItem> shortenedList = new ArrayList<MediaDetailsItem>();
                        for(MediaDetailsItem item : items){
                            for(String id : mediaIds){
                                if(item.getMediaId().equals(id)){
                                    shortenedList.add(item);
                                    break;
                                }
                            }
                        }
                        items.clear();
                        items.addAll(shortenedList);

【问题讨论】:

  • 如果这段代码运行良好,那么这个问题在 Stack Overflow 上是题外话,但可能对我们的姊妹网站 Code Review 有好处。
  • @JoeC 好的,谢谢,我会把它移到那里。

标签: java list arraylist


【解决方案1】:

至少,将mediaIds 转换为Set,并使用时间复杂度为O(1) 的contains 方法。

此外,使用 Java 8 的流 API 可能不会提高效率,但它可能会使您的代码更优雅:

Set<String> mediaIdSet = new HashSet<>(mediaIds);
items = items.steam()
             .filter(i -> mediaIds.contains(i.getMediaId())
             .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多