2017-12-02 15 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

고유성을 강요하는 본질적으로 컬렉션이므로 Set 구현을 사용하는 옵션 중 하나는 여러 옵션이 있습니다. 옵션 중 또 다른 옵션은 새 목록을 만들고 람다를 사용하여 별개의 요소를 얻는 것입니다. 예를 들어 고유/고유 요소 만 "래서 피"목록에서 새로운 목록 "recipesUnique"로 복사한다고 가정 해 봅시다.

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

은 당신이 저를 요구하는 경우에, 람다 그렇지 않으면 단지 Set를 사용하면 목록을 사용 할 의무가있는 경우 간단한 일입니다, 많은 가능한 해결책이 있습니다.

+0

저는 아직 Java에 익숙하지 않습니다. 나는 람다를 그렇게 많이 이해하지 못한다. 그래서 나는 세트 1을 사용하는 것에 충실 할 것이다. 그러나 나는 람다에 도착할 때이 글을 염두에 두겠다. 도움을 주셔서 감사합니다. – VeeAyeInIn

+0

당신을 진심으로 환영합니다. – prsvr