假设几乎没有类扩展抽象类abc: -
public class mno extends abc { ... }
public class pqr extends abc { ... }
public class xyz extends abc { ... }
有一个对象列表,其中包含这些类的对象。
List<abc> f =new ArrayList<abc>();
f.add(new mno());
f.add(new pqr());
f.add(new xyz());
有没有办法检查列表f 是否包含类xyz的对象,从列表中删除它。
我尝试了f.contains(xyz.class)或f.contains(new xyz())但是它返回了flase
答案 0 :(得分:4)
如果你使用java 8,你可以这样做:
f.removeIf(xyz.class::isInstance);
答案 1 :(得分:1)
您可以使用Java 8 Streams。
List<abc> newList = new ArrayList<>(f)
.stream()
.filter(xyz.class::isInstance)
.collect(Collectors.toList());
答案 2 :(得分:0)
您需要使用instanceof
运算符来检查对象是否为特定类型,如下所示:
Iterator<abc> iterator = f.iterator();
while(iterator.hasNext()) {
if(iterator.next() instanceof xyz) {
iterator.remove();
}
}
此外,上面的代码使用Iterator安全地从列表中删除对象。
另外,我强烈建议您遵循类,变量等的Java命名约定,因为您的示例类名abc,xyz等非常差。