为什么我不能将谓词应用于java流过滤器?

时间:2016-03-14 15:52:17

标签: java java-stream predicate

我有这段代码:

@Override
public List<Device> getAvailableDevices(Predicate<Device> filter) {
    return deviceRepository.getDevices()
            .stream()
            .filter(filter)
            .collect(Collectors.toList());
}

我收到此错误:

Error:(55, 25) java: incompatible types: com.google.common.base.Predicate<com.m.automation.common.mobile.services.devices.dataModel.Device> cannot be converted to java.util.function.Predicate<? super com.m.automation.common.mobile.services.devices.dataModel.Device>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您使用的是Guava谓词,而不是java.util.function.Predicate。这由源文件中的import语句决定。

如果您可以更改此代码及其来电者,请更改此getAvailableDevices()方法的类型以接受java.util.function.Predicate。只需更改您的import指令即可实现,但它可能会影响其他代码;如果您真的想继续在其他地方使用Guava谓词,可以使用完全限定名称java.util.function.Predicate将更改定位到此方法。

如果您无法对此方法签名进行更改,请将Predicate替换为标准filter(filter),并将filter(filter::apply)替换为Chloe Megan Harry etc...