2017-12-02 26 views
1

現在、リストからすべての重複を削除しようとしています。しかし、私が集めたものから、合計金額が2で割り切れれば、それは削除されます。3、5、またはそれ以上の場合は、どのようにすべてのコピーを得るように編集できますか?リストからすべての重複を削除する方法

if(check.size() < recipes.size()) { //check is a set, checking for copies. 
     logger.warning("We found a copy of names, please change them! We will be disabling those recipes to disable errors."); 
     for(int i = 0; i < recipes.size(); i++) { 
      for(int j = 0; j < recipes.size(); j++) { 
       if(recipes.get(i) == recipes.get(j) && i != j) { 
        logger.warning("We found copies of " + recipes.get(i)); 
        recipes.remove(i); 
        recipes.remove(j); 
       } 
      } 
     } 
    } 

現在、リストから2つの値しか削除されません。

また、コピーがある場合、残りのコピーが1つも残っていないので、後でエラーを避けるためにコピーをすべて削除します。

答えて

4

複数のオプションが用意されていますが、そのうちの1つはSetの実装を使用することですが、それは本質的に一意性を要求するコレクションであるためです。オプションの別の1つは、新しいリストを作成し、別の要素を取得するためにlambdasを使用することです。たとえば、「レシピ」リストから新しいリスト「recipesUnique」に一意/個別の要素のみをコピーするとします。

ArrayList<T> recipesUnique = new ArrayList<>(); 
recipes.stream().distinct().forEach(recipesUnique::add); 

は、あなたが私に言わせれば、ラムダは、そうでない場合は、単にSetを使用し、あなたがリストを使用することを義務づけられている場合は、最も単純なものをしている、より多くの可能な解決策があります。

+0

私はまだJavaの方が新しいです。私は本当にラムダをあまり理解していないので、私は設定されたものを使うことに固執しますが、ラムダに行くときにこのポストを覚えておきます。助けてくれてありがとう。 – VeeAyeInIn

+0

あなたは大歓迎です。 – prsvr

関連する問題