2017-09-22 12 views
1

私は、それぞれにIDを持つオブジェクトのリストを持っています。私はメディアIDのリストだけの2番目のリストを持っています。最初のリストから、2番目のリストに含まれるmediaIDと一致しないオブジェクトを削除します。これについての効率的な方法は何ですか?私が考えることができる唯一の方法は、forループを入れ子にすることでしたが、それは非効率的です。オブジェクトのIDがIDのリストにない場合、オブジェクトをリストから削除する最も良い方法は何ですか?

これは私の実装です。 「items」はMediaDetailsItemオブジェクトを含む最初のリストであり、これらの各オブジェクトには特定のmediaIdが含まれていることに注意してください。 2番目のリストは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 [OK]を、ありがとう、私はそこに移動します。 –

答えて

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()); 
関連する問題