我在从此方法返回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);
}
答案 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;
}