2017-09-22 67 views
1

我有一個對象的列表,每個對象都有一個ID。我有第二個列表,只是媒體ID列表。我想從第一個列表中刪除與第二個列表中包含的mediaID不匹配的對象。什麼是有效的方式去做這件事?我能想到的唯一方法是嵌套for循環,但效率不高。如果ID的ID不在ID列表中,從列表中刪除對象的最佳方法是什麼?

這是我的實現。請注意,「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); 
+0

如果這個代碼工作正常,那麼這個問題是關上的堆棧溢出的話題,但可能對我們的姊妹網站[代碼評論](https://codereview.stackexchange.com/)很有用。 –

+0

@JoeC好的,謝謝,我會把它移到那裏。 –

回答

0

在最低限度,轉換mediaIdsSet,以及使用哪個應當具有一個O(1)時間複雜度的方法contains

此外,使用Java 8的流API可能不會提高效率,但它可能會使你的代碼更優雅:

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