【问题标题】:method reference expected error on multiple filter in lambda javalambda java中多个过滤器的方法引用预期错误
【发布时间】:2021-06-30 15:22:28
【问题描述】:

我试图在过滤器中使用 2 个条件,但给出了错误

ArrayList<String> abc = new ArrayList<String>(){{
    add("OWVjZWU2");
    add("YWVjZWU2");
    add("ZWVjZWU2");
}};
mypairs.stream().filter(pair -> abc.contains("ded") || Utils::mymethod).collect(..some code..)

但是这种情况很好用

mypairs.stream().filter(Utils::mymethod).collect(..some code..)

P.S mymethod 是这样的方法:

public static boolean isPacingExcluded(ABSType pair)

我是 java 新手,正在检查这里出了什么问题

【问题讨论】:

  • Utils::mymethod 代表Predicate,但pair -&gt; abc.contains("ded") || Utils::mymethod 不代表。你可以使用pair -&gt; abc.contains("ded") || Utils.myMethod(pair)

标签: java lambda java-stream


【解决方案1】:

您不能将方法引用与 lambda 表达式一起使用,因此您需要使用 pair -&gt; abc.contains("ded") || Utils.isPacingExcluded(pair).

另外,从代码看来abc.contains("ded")mypairs 的任何元素都没有关系。即abc.contains("ded") 的结果独立于mypairs 的元素,因此您无需对列表的每个元素重复此操作。我建议将代码更改为:

if(abc.contains("ded")) {
    mypairs.stream().filter(Utils::mymethod).collect(..some code..)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多