我有一种使用谓词接口的过滤方法来在某些情况下过滤列表。

public static <T> List<T> filter(List<T> list,Predicate<T> predicate){
    List<T> result=new ArrayList<T>();
    for(T t:list){
        if(predicate.test(t)){
            result.add(t);
        }
    }
    return result;
}


我有一个整数数组列表作为列表arraIntegerList = Arrays.asList(1,2,3,3,4);

在调用上述方法时,它给出了编译错误。

System.out.println(filter(arraIntegerList,(int i)->(i>2)));


为什么在与String相同的列表正常工作时给出编译错误。

最佳答案

您需要为List提供一个参数化类型,并且lambda的参数必须与List的参数匹配。

例如,这有效:

List<Integer> arraIntegerList=Arrays.asList(1,2,3,3,4);
System.out.println(filter(arraIntegerList,(Integer i)->(i>2)));


输出:

[3, 3, 4]


正如Stuart Marks所说,这也可以:

List<Integer> arraIntegerList=Arrays.asList(1,2,3,3,4);
System.out.println(filter(arraIntegerList,i->(i>2)));

08-04 18:56