为什么这是错的?关于java 8流媒体

时间:2014-10-23 05:48:37

标签: java collections java-8

public interface Filter<M> {

    boolean match(M m);

    public static <T> Collection<T> filter(Collection<T> collection, Filter<T> filter) {
        return collection.stream().filter(filter::match).collect(Collectors.toList());
    }

    ////////////////////////////////////////////////////////////////

    public static void main(String[] args) {
        ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8));
        System.out.println(intList);

        List<Integer> list = filter(intList, null);

        System.out.println(list);
    }
}

parameter type error

我正在学习java 8流媒体功能,这是我有问题的代码...

我不知道为什么参数intListfilter()方法不匹配。 Java应该知道这里<T>Integer,对吗?

1 个答案:

答案 0 :(得分:7)

我还不确定您为什么会收到该特定错误,但问题是您的方法声明它会返回Collection<T>,但您正在尝试分配结果为List<T>。如果您将filter的声明更改为:

public static <T> List<T> filter(Collection<T> collection, Filter<T> filter)

...然后编译没有任何问题。