是否有比我做的方式更有效/更快/更明智的方法来复制ArrayList的一部分?
public ArrayList<FooObject> getListOfFlagged() {
for(FooObject fooObject: foos) {
//for each item in the original array, where the item isFlagged...
if(fooObject.isFlagged) {
someOtherArray.add(fooObject);
}
}
return someOtherArray;
}
最佳答案
您可以使用Collections2.filter()
中的guava
方法。从功能上来看:
Collections2.filter(foos, new Predicate<FooObject>() {
@Override
public boolean apply(FooObject input) {
return fooObject.isFlagged();
}
})
结果由您的原始
foos
集合支持,因此,如果需要复制,则必须使用new ArrayList<FooObject>(filteredCollection)
进行防御性复制。