Arraylist去除第一次出现,而不是一个确切的对象

时间:2017-10-09 04:42:46

标签: java arraylist

我在jsf中有数据表。单击“添加”按钮后,根据选定的值加载列表。成功添加到列表中的元素。 添加到列表中,

public class CompanyProduct implements Serializable{
    private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue
        @Getter @Setter private int id;

        @ManyToOne
        @JoinColumn(name = "productId", referencedColumnName = "id")
        @Getter @Setter private Product product;

        @ManyToOne
        @JoinColumn(name = "companyId", referencedColumnName = "id")
        @Getter @Setter private Company company;

        @Setter @Getter private Double price;

        @Setter @Getter private Double sellingprice;

        @Column
        @Getter @Setter private Integer minQuantity;

        @Column
        @Getter @Setter private Integer maxQuantity;

        @Column
        @Getter @Setter private Integer leadTime;

        @ManyToOne
        @JoinColumn(name="uom_group_item_id")
        @Getter @Setter private UomGroupItem uomGroupItem;

}

public void addToAssociation() {


        List<CompanyProduct> tmpList = new ArrayList<CompanyProduct>(companyproducts);

        for (Product p : selectedProducts) {
            boolean flag = false;

            for(CompanyProduct companyProduct: tmpList){
                if(companyProduct.getUomGroupItem() == null && companyProduct.getProduct() != null && companyProduct.getProduct().getId().equals(p.getId())){
                    flag = true;
                }
            }

            if(!flag){
                addCompanyProducts(p, null);
            }

            addUomGroupProduct(p);
        }
        selectedProducts = null;
        loadLazyProducts();
    }

private void addCompanyProducts(Product p,UomGroupItem item){
        CompanyProduct sg = new CompanyProduct();
        sg.setProduct(p);
        sg.setCompany(company);
        sg.setPrice((double) (p.getMrp()==null?0f:p.getMrp()));
        sg.setSellingprice((double) (p.getMrp()==null?0f:p.getMrp()));

        if(item != null){
            sg.setUomGroupItem(item);
        }

        companyproducts.add(sg);
    }

但问题是,当我去删除时,执行操作,

for (CompanyProduct sg : selectedToBeAssociatedProducts) {
        companyproducts.remove(sg);
    }

但它在列表中删除了第一个匹配项。我也许知道这个问题的原因。提前谢谢。

如有任何疑问,请与我们联系。

4 个答案:

答案 0 :(得分:2)

  • List.removeAll(Object value)将删除每次出现的值
  • List.remove(Object value)将删除第一次出现的值
  • List.remove(int position)将移除位置
  • 的值

答案 1 :(得分:1)

这是设计使用,请参阅List API

export interface ComponentOptions {
    tag: string;
    styleUrl?: string;
    styleUrls?: string[] | ModeStyles;
    styles?: string;
    shadow?: boolean;
    host?: HostMeta;
    assetsDir?: string;
    assetsDirs?: string[];
}

如果要删除所有匹配项,请使用List.removeAll,如下所示

remove(Object o) 

Removes the first occurrence of the specified element from this list, if it is present (optional operation).

答案 2 :(得分:1)

尝试以下代码。如果它不起作用。请告诉我们原因。或者接受一个回答来关闭这个问题

list.removeAll(Collectoins.singelton(obj);

答案 3 :(得分:0)

如果要删除列表中的第一项。做list.remove(0)

如果要删除列表中与特定值对应的第一项。做list.remove(value)