我想创建一个简单的通用方法来计算应用过滤器后的数字.
static int count(Collection < ? extends Number > numbers, Predicate < ? extends Number > predicate) {
return numbers.stream().filter(predicate).count();
}
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
不兼容的类型:谓词不能转换为
Predicate<? super CAP#2>CAP#1,CAP#2是新的类型变量:CAP#1从捕获数量扩展数量?扩展数量
CAP#2从捕获数量扩展数量?扩展数量
您不能使用这样的通配符,因为第二个参数取决于第一个!你的版本意味着你想要一个苹果集合然后应用香蕉谓词.
换句话说:简单地声明一个not-unkown类型参数; 并使用:
static <T extends Number> long count(Collection<T> numbers, Predicate <T> predicate) {
Run Code Online (Sandbox Code Playgroud)
对于记录:count()返回一个长的结果; 因此我相应地改变了返回类型.如果那不是你想要的,你必须转换为int,但生活在(潜在的)信息丢失.
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |