是否有比我做的方式更有效/更快/更明智的方法来复制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)进行防御性复制。

10-05 19:40