我试图在Stream
中使用orElse
,但难以理解错误。
collectorConfiguration = Optional.ofNullable(recapPlacement.getAttId())
.map(attId -> Optional.ofNullable(processorEngine.buildFrimFromAttId(attId))
.orElseThrow( () -> new OmegaException("UnableToFirmByAttId", recapPlacement.getAttId())))
.orElse( () -> Optional.ofNullable(collectorConfigurations.stream() //getting error here
.filter(cc -> recapPlacement.getPnetCode().equals(cc.getPnetCode()))
.filter(Objects::nonNull)
.findFirst())
.orElseThrow( () -> new OmegaException("CollectorCouldNotMapForPnetCode", recapPlacement.getPnetCode()))
);
我试图在以上代码中总体上
如果collectorConfig
不为空,则获取attId
如果attId
不为空并且没有为该collectorConfig
找到attId
,那么我抛出异常
如果attId
为空,那么我正在使用pnet
代码通过流collectConfig
列表来获取collectConfigurations
如果找不到collectConfig
的{{1}},那么我抛出异常
它在pnetCode
块中给出了编译错误'Target type of a lambda expression must be an interface
'。
答案 0 :(得分:3)
您可能要替换
.orElse( () -> Optional.ofNullable(collectorConfigurations.stream() //getting error here
带有Optional.orElseGet
,期望Supplier
为:
.orElseGet( () -> Optional.ofNullable(collectorConfigurations.stream() ...
除上述内容外,您不需要供应商中的Optional.ofNullable
.orElseGet( () -> collectorConfigurations.stream()
.filter(cc -> recapPlacement.getPnetCode().equals(cc.getPnetCode()))
.filter(Objects::nonNull) //non-null filtered
.findFirst()) // optional
.orElseThrow( () -> new OmegaException("CollectorCouldNotMapForPnet...
答案 1 :(得分:1)
orElse
采用常规值,而不是用lambda表示的任何值。只需删除() ->
应该会有所帮助。另外,您可能打算致电orElseGet