加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – stream reduction不兼容的类型

发布时间:2020-12-15 05:14:30 所属栏目:Java 来源:网络整理
导读:我正在尝试创建一个包含多个谓词并减少它们的查找程序: public static T extends BusinessInterface CollectionT findOr( Context pContext,ClassT pClass,Predicate? super T... pPredicates) { Predicate? super T lReducedPredicate = Arrays.asList(pPr
我正在尝试创建一个包含多个谓词并减少它们的查找程序:

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);
}

不幸的是我得到以下编译错误:

Predicate lReducedPredicate = Arrays.asList(pPredicates).stream().reduce(Predicate::or).orElse(r -> false);
incompatible types: Predicate cannot be converted to Predicate
where T is a type-variable:
T extends BusinessInterface declared in method findOr(Context,Class,Predicate…)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object super: T from capture of ? super T
CAP#2 extends Object super: T from capture of ? super T

我在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实例传递给任一测试方法都是有效的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读