我有这段代码:
@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>
我该如何解决这个问题?
答案 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...
。