2012-11-11 38 views
0

我在通过其ID删除数据时遇到问题。 我在我的数据列表中有一本书,我想根据其ID删除特定的书籍。 我试过下面的代码,但我的数据没有删除。如何通过数据ID从Arraylist中删除数据

请检查我的代码,并为其提供解决方案。

更新 当我调用此方法则编译器读取所有下面的代码,但它不会从我的数组列表中删除我的数据。我没有收到任何错误。

------------------- 
    ------------------- 
    public String removebookfrmSession() 
    { 
     List<Bookdetails> books = new ArrayList<Bookdetails>(); 
     String bookid = request.getParameter("bkid");  
     Bookdetails book = dao.listBookDetailsById(Integer.parseInt(bookid)); 
     books = (ArrayList) session.get(BillTransactionBooksConstants.BOK); 
     if (books == null) books = new ArrayList<Bookdetails>(); 
     boolean already_exists = false; 
     for (Bookdetails b : books) 
     { 
      if (Integer.toString(b.getId()).equals(bookid)) 
      { 
       already_exists = true; 
       break; 
      } 
     } 
     if (book != null && already_exists ) 
     { 
      books.remove(book); 
      System.out.println("books size"+books.size()); 
      session.put(BillTransactionBooksConstants.BOK,books); 
     } 
     return SUCCESS; 
    } 

Bookdetails.java(POJO)

 package v.esoft.pojos; 

    // Generated Nov 5, 2012 9:37:14 PM by Hibernate Tools 3.4.0.CR1 

    import java.util.Date; 
    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.GeneratedValue; 
    import static javax.persistence.GenerationType.IDENTITY; 
    import javax.persistence.Id; 
    import javax.persistence.Table; 
    import javax.persistence.Temporal; 
    import javax.persistence.TemporalType; 

    /** 
    * Bookdetails generated by hbm2java 
    */ 
    @Entity 
    @Table(name = "bookdetails", catalog = "vbsoftware") 
    public class Bookdetails implements java.io.Serializable { 

     private Integer id; 
     private String isbn; 
     private String bookTitile; 
     private String authFirstname; 
     private String authLastname; 
     private String editionYear; 
     private Integer subjectId; 
     private Integer coverId; 
     private Integer languageId; 
     private String publisherName; 
     private Integer editionId; 
     private Float price; 
     private String quantity; 
     private String description; 
     private Integer locationId; 
     private String remarks; 
     private String img1; 
     private String img2; 
     private String videoUrl; 
     private Integer createrId; 
     private Date createdDate; 
     private Integer updateId; 
     private Date updatedDate; 

     public Bookdetails() { 
     } 

     public Bookdetails(String isbn, String bookTitile, String authFirstname, 
       String authLastname, String editionYear, Integer subjectId, 
       Integer coverId, Integer languageId, String publisherName, 
       Integer editionId, Float price, String quantity, 
       String description, Integer locationId, String remarks, 
       String img1, String img2, String videoUrl, Integer createrId, 
       Date createdDate, Integer updateId, Date updatedDate) { 
      this.isbn = isbn; 
      this.bookTitile = bookTitile; 
      this.authFirstname = authFirstname; 
      this.authLastname = authLastname; 
      this.editionYear = editionYear; 
      this.subjectId = subjectId; 
      this.coverId = coverId; 
      this.languageId = languageId; 
      this.publisherName = publisherName; 
      this.editionId = editionId; 
      this.price = price; 
      this.quantity = quantity; 
      this.description = description; 
      this.locationId = locationId; 
      this.remarks = remarks; 
      this.img1 = img1; 
      this.img2 = img2; 
      this.videoUrl = videoUrl; 
      this.createrId = createrId; 
      this.createdDate = createdDate; 
      this.updateId = updateId; 
      this.updatedDate = updatedDate; 
     } 

     @Id 
     @GeneratedValue(strategy = IDENTITY) 
     @Column(name = "id", unique = true, nullable = false) 
     public Integer getId() { 
      return this.id; 
     } 

     public void setId(Integer id) { 
      this.id = id; 
     } 

     @Column(name = "isbn", length = 90) 
     public String getIsbn() { 
      return this.isbn; 
     } 

     public void setIsbn(String isbn) { 
      this.isbn = isbn; 
     } 

     @Column(name = "book_titile") 
     public String getBookTitile() { 
      return this.bookTitile; 
     } 

     public void setBookTitile(String bookTitile) { 
      this.bookTitile = bookTitile; 
     } 

     @Column(name = "auth_firstname", length = 120) 
     public String getAuthFirstname() { 
      return this.authFirstname; 
     } 

     public void setAuthFirstname(String authFirstname) { 
      this.authFirstname = authFirstname; 
     } 

     @Column(name = "auth_lastname", length = 120) 
     public String getAuthLastname() { 
      return this.authLastname; 
     } 

     public void setAuthLastname(String authLastname) { 
      this.authLastname = authLastname; 
     } 

     @Column(name = "edition_year", length = 20) 
     public String getEditionYear() { 
      return this.editionYear; 
     } 

     public void setEditionYear(String editionYear) { 
      this.editionYear = editionYear; 
     } 

     @Column(name = "subject_id") 
     public Integer getSubjectId() { 
      return this.subjectId; 
     } 

     public void setSubjectId(Integer subjectId) { 
      this.subjectId = subjectId; 
     } 

     @Column(name = "cover_id") 
     public Integer getCoverId() { 
      return this.coverId; 
     } 

     public void setCoverId(Integer coverId) { 
      this.coverId = coverId; 
     } 

     @Column(name = "language_id") 
     public Integer getLanguageId() { 
      return this.languageId; 
     } 

     public void setLanguageId(Integer languageId) { 
      this.languageId = languageId; 
     } 

     @Column(name = "publisher_name", length = 70) 
     public String getPublisherName() { 
      return this.publisherName; 
     } 

     public void setPublisherName(String publisherName) { 
      this.publisherName = publisherName; 
     } 

     @Column(name = "edition_id") 
     public Integer getEditionId() { 
      return this.editionId; 
     } 

     public void setEditionId(Integer editionId) { 
      this.editionId = editionId; 
     } 

     @Column(name = "price", precision = 12, scale = 0) 
     public Float getPrice() { 
      return this.price; 
     } 

     public void setPrice(Float price) { 
      this.price = price; 
     } 

     @Column(name = "quantity", length = 40) 
     public String getQuantity() { 
      return this.quantity; 
     } 

     public void setQuantity(String quantity) { 
      this.quantity = quantity; 
     } 

     @Column(name = "description", length = 65535) 
     public String getDescription() { 
      return this.description; 
     } 

     public void setDescription(String description) { 
      this.description = description; 
     } 

     @Column(name = "location_id") 
     public Integer getLocationId() { 
      return this.locationId; 
     } 

     public void setLocationId(Integer locationId) { 
      this.locationId = locationId; 
     } 

     @Column(name = "remarks", length = 65535) 
     public String getRemarks() { 
      return this.remarks; 
     } 

     public void setRemarks(String remarks) { 
      this.remarks = remarks; 
     } 

     @Column(name = "img1") 
     public String getImg1() { 
      return this.img1; 
     } 

     public void setImg1(String img1) { 
      this.img1 = img1; 
     } 

     @Column(name = "img2") 
     public String getImg2() { 
      return this.img2; 
     } 

     public void setImg2(String img2) { 
      this.img2 = img2; 
     } 

     @Column(name = "video_url", length = 65535) 
     public String getVideoUrl() { 
      return this.videoUrl; 
     } 

     public void setVideoUrl(String videoUrl) { 
      this.videoUrl = videoUrl; 
     } 

     @Column(name = "creater_id") 
     public Integer getCreaterId() { 
      return this.createrId; 
     } 

     public void setCreaterId(Integer createrId) { 
      this.createrId = createrId; 
     } 

     @Temporal(TemporalType.TIMESTAMP) 
     @Column(name = "created_date", length = 19) 
     public Date getCreatedDate() { 
      return this.createdDate; 
     } 

     public void setCreatedDate(Date createdDate) { 
      this.createdDate = createdDate; 
     } 

     @Column(name = "update_id") 
     public Integer getUpdateId() { 
      return this.updateId; 
     } 

     public void setUpdateId(Integer updateId) { 
      this.updateId = updateId; 
     } 

     @Temporal(TemporalType.TIMESTAMP) 
     @Column(name = "updated_date", length = 19) 
     public Date getUpdatedDate() { 
      return this.updatedDate; 
     } 

     public void setUpdatedDate(Date updatedDate) { 
      this.updatedDate = updatedDate; 
     } 

    } 
+0

你应该使用'Iterator'然后调用'remove'。或者根据'bookid'提供等号 –

+0

你面临什么问题?任何异常,错误或意外输出?请张贴相关的东西。你为什么这样说: - 'return SUCCESS'。我在那里看到一个未定义的变量。 –

+0

@RohitJain我更新了。请检查我的信息。 – user1726508

回答

2

Bookdetails类必须使用List#remove(Object o)方法实现public boolean equals(Object o)方法。否则,您应该像@juergend所说的那样自己处理对象删除。

实施equals方法是这样的:

public class Bookdetails { 
    private int id; 
    //other attributes and methods... 

    @Override 
    public boolean equals(Object o) { 
     if (o instanceof Bookdetails) { 
      Bookdetails oBookdetails = (Bookdetails)o; 
      return (this.id == oBookdetails.id); 
     } 
     return false; 
    } 
} 

现在books.remove(book);将不需要的for (Bookdetails b : books)循环的工作。

+0

我写了这个方法'@Override public boolean equals(Object o){'在我的Bookdetails pojo类中,但是IDE显示错误错误:**这条线上有多个标记 \t - 此方法必须返回类型结果 \t布尔值 \t - 覆盖java.lang.Object.equals ** – user1726508

+0

@ user1726508答案已更新,我的错误。 –

1

默认相等基于reference,因此您需要将book指定为list的引用,以便remove可以使用。或者你也可以覆盖equals但我不能肯定是否可以在bookId

for (Bookdetails b : books) 
{ 
    if (Integer.toString(b.getId()).equals(bookid)) 
    { 
     already_exists = true; 
     book= b; 
     break; 
    } 
} 

提供平等然后当你调用remove因为引用相等它会删除book

更新:

如果它的POJO和primary key那么你可以很容易地在primary key上实现等于id。无需遍历列表。