无法从集合中删除对象

时间:2016-12-20 11:07:17

标签: java sorting set comparator treeset

我需要删除Set<Commentaries>的评论。它奏效了!但我尝试使用下面的代码,它不起作用。 我使用SetTreeSet

订购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的新手,如果你不明白我可以编辑我的问题!

2 个答案:

答案 0 :(得分: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);
   }
}

对象被移除,如预期的

答案 1 :(得分:0)

  • 使用TreeSet时,请确保您的Comparator提供正确的结果。
  • 在您的情况下MyComparator比较哪个字段很重要。
  • 如果比较器返回0表示两条注释相同,在执行treeComment.addAll(comSet);
  • 时不会添加到树集中
  • 如果评论未添加到树集中,则意味着您无法将其删除。
  • 虽然所有的集合都会在删除时给你返回标志。如果为false则表示树集中没有注释。

特定代码的问题会有所帮助。