Java:在应用过滤器后创建一个简单的通用方法进行计数
我想创建一个简单的通用方法,在基于提供的predicate
应用过滤器之后,对numbers
进行计数
static int count(Collection < ? extends Number > numbers, Predicate < ? extends Number > predicate) {
return numbers.stream().filter(predicate).count();
}
它给了我以下错误:
incompatible types: Predicate cannot be converted to
Predicate<? super CAP#2>
where CAP#1, CAP#2 are fresh type-variables:CAP#1 extends Number from capture of ? extends Number
CAP#2 extends Number from capture of ? extends Number
# 1 楼答案
不能这样使用通配符,因为第二个参数取决于第一个参数!您的版本意味着您希望获取一组苹果,然后对其应用香蕉谓词
换句话说:只需声明一个非未知的类型参数;用这个:
对于记录:
count()
返回一个长结果;因此,我相应地更改了返回类型。如果这不是你想要的,你必须将其转换为int,但要忍受(潜在的)信息丢失