2016-12-20 15 views
0

Мне нужно удалить комментарий с Set<Commentaries>. И это сработало! Но я пробую с кодом ниже, он не работает. После того как я заказал свою Set с помощью TreeSet с MyComparatorНе удается удалить объект из набора

@RequestMapping("/user/editPage/{idContractor}") 
public String goToEditPage(@PathVariable("idContractor") Integer idContractor, Model model) { 

..... 

Set<Commentaries> comSet = contractorsWithId.getCommentarieses(); 
TreeSet<Commentaries> treeComment = new TreeSet<Commentaries>(new MyComparator()); 
treeComment.addAll(comSet); 
contractorsWithId.setCommentarieses(treeComment); 

return "user/editPage"; 
} 

// Ниже мой метод для удаления

public void removeCommentaries(Commentaries commentToDelete, Contractors contractorWithID) { 
    contractorWithID.getCommentarieses().remove(commentToDelete); 
    contractorsService.update(contractorWithID); 
} 

Помогите мне пожалуйста! Я новичок в stackoverflow, и если что-то не понимаю, я могу изменить свой вопрос!

+0

Какая ошибка? – gipsy

+0

Какая ошибка и на каком наборе вы пытаетесь вызвать delete? 'comSet' или' treeComment'? Вы должны создать минимальный, полный и проверяемый пример, чтобы мы могли воспроизвести проблему. – marstran

+0

Этот код ничего не удаляет. Вы просто меняете тип набора. Пожалуйста, отправьте код, который «работал». – Ilya

ответ

0

У меня есть простой пример, но он работает. Пожалуйста, поправьте меня:

public class Main 
{ 
    static Contractors con = new Contractors(); 

    static Commentaries com = new Commentaries("TROL"); 

    static 
    { 
     con.getCommentarieses().add(new Commentaries("1A")); 
     con.getCommentarieses().add(new Commentaries("2B")); 
     con.getCommentarieses().add(com); 
     con.getCommentarieses().add(new Commentaries("3C")); 
    } 

    public static void main(String[] args) 
    { 
     Set<Commentaries> comSet = con.getCommentarieses(); 
     TreeSet<Commentaries> treeComment = new TreeSet<>((a1, a2) -> {return a1.name.compareTo(a2.name);}); 
     treeComment.addAll(comSet); 
     con.setCommentarieses(treeComment); 

     removeCommentaries(com, con); 

     System.out.println(con); 
    } 

    public static void removeCommentaries(Commentaries commentToDelete, Contractors contractorWithID) 
    { 
     contractorWithID.getCommentarieses().remove(commentToDelete); 
    } 
} 

объект удаляется, как ожидается,

0
  • при работе с TreeSet убедитесь, что ваш компаратор дает правильный результат.
  • В вашем случае MyComparator сравнение на этом поле важный.
  • Если Compator return 0 означает, что два комментария являются одинаковыми, которые не будут добавлены к деревьям при выполнении treeComment.addAll(comSet);
  • Если комментарий не добавляется в treeet, что означает, что вы не можете его удалить.
  • хотя все коллекции дают вам флаг возврата при удалении. Если оно ложно, это означает, что комментария не было в treeet.

Проблема с конкретным кодом поможет.