这个代码怎么了?它没有过滤集合!

时间:2009-11-16 00:26:08

标签: java generics

public class CollectionsFilter {

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5, 6, 7,
                8, 9, 10 });
        Collection<Integer> evenNumbers = Utils.filter(list,
                new Predicate<Integer>() {
                    public boolean apply(Integer i) {
                        if (i % 2 == 0) {
                            return true;
                        }
                        return false;
                    }
                });

        Collection<Integer> oddNumbers = Utils.filter(list,
                new Predicate<Integer>() {
                    public boolean apply(Integer i) {
                        if (i % 2 != 0) {
                            return true;
                        }
                        return false;
                    }
                });
        System.out.println("EVEN Numbers > " + evenNumbers);
        System.out.println("ODD Numbers > " + oddNumbers);
    }

}

我的Utils.filter()方法是:

public static <T> Collection<T> filter(Collection<T> target,
            Predicate<T> predicate) {
        Collection<T> filteredCollection = new ArrayList<T>();
        for (T t : filteredCollection) {
            if (predicate.apply(t)) {
                filteredCollection.add(t);
            }
        }
        return filteredCollection;
    }

和Prdicate:

public interface Predicate<T> {
    public boolean apply(T type);
}

2 个答案:

答案 0 :(得分:5)

首先,不要自己编写这种代码。那是Google Collections

话虽如此:尝试在target方法中迭代filteredCollection而不是filter(),这应该可以修复它。

答案 1 :(得分:4)

那是因为你的Util.filter运行在它开头创建的空的filteredCollection。