从方法返回ArrayList

时间:2015-11-17 17:18:27

标签: java arraylist

我在从此方法返回arraylist时遇到问题。该方法应该使用存储的保险类型检查给定的保险类型。如果匹配,则要删除该元素,并显示其余部分。

请在此处建议返回arraylist的语法

public ArrayList<Insurance> retrieveDetails(String insType){

  Iterator<Insurance> itr=insurancelist.iterator();

  while(itr.hasNext()) {
    Insurance c=itr.next();

  if(c.getInsuranceType().equals(insType)) {
    insurancelist.remove(c);

}
else
    System.out.println(c);


}

2 个答案:

答案 0 :(得分:0)

你看到的原因:

  

[com.Insurance@2a139a55,com.Insurance @ 15db9742,com.Insurance@6d06d69c]

保险类是否没有toString()方法。所以它使用Object中的默认toString()方法。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

如果您希望在打印Insurance对象时更有意义,那么您需要在Insurance.java中创建一个类似于此的方法,假设您有一个insuranceType字符串和一个policyID值作为类变量:

public String toString() {
    return this.policyID+": "+this.insuranceType;
}

答案 1 :(得分:0)

假设这就是你所拥有的:

enum InsuranceType {}

interface Insurance {
    InsuranceType getType()
}

这里有两个简单的选择:   1.在列表中使用迭代器并随时删除元素。   2.遍历列表,找到要删除的所有元素,然后在迭代后删除它们。

public List<Insurance> retrieveDetais(List<Insurance> insurances, InsuranceType type) {
    List<Insurance> toRemove = new ArrayList<Insurance>();
    for (Insurance i : insurances) {
        if (i.getInsuranceType().equals(insuranceType)) {
            toRemove.add(i);
        }
    }
    for (Insurance i : toRemove) {
        insurances.remove(i);
    }
    return insurances;
}

你总是可以使它更通用或者去迭代器路径:

public List<Insurance> removeInsuranceType(List<Insurance> insurances, InsuranceType type) {
    Iterator<Insurance> iter = insurances.iterator();
    while (iter.hasNext()) {
        Insurance i = iter.next();
        if (i.getType() == type) {
            iter.remove();
        }
    }
    return insurances;
}