java – stream reduction不兼容的类型
我正在尝试创建一个包含多个谓词并减少它们的查找程序:
public static <T extends BusinessInterface> Collection<T> findOr( Context pContext,Class<T> pClass,Predicate<? super T>... pPredicates) { Predicate<? super T> lReducedPredicate = Arrays.asList(pPredicates).stream().reduce(Predicate::or).orElse(r -> false); return find(pContext,pClass,lReducedPredicate); } 不幸的是我得到以下编译错误:
我在Eclipse中没有错误,我不知道出了什么问题. 任何帮助真的很感激:). 解决方法
解决这个问题的一种方法是使用
public static <T extends BusinessInterface> Collection<T> findOr( Context pContext,Predicate<? super T>... pPredicates) { Predicate<? super T> lReducedPredicate = Arrays.asList(pPredicates).stream() .reduce((a,b) -> t -> a.test(t) || b.test(t)).orElse(r -> false); return find(pContext,lReducedPredicate); } 虽然你不能在谓词上调用or方法<?超级T>实例与另一个谓词<?超级T>作为参数,您可以创建相同的函数,或者自己返回,因为将T实例传递给任一测试方法都是有效的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |