我有这段代码,要从具有某种条件
的DeviceEvents列表中提取List<DeviceEvent> deviceEvents = new ArrayList<>();
deviceEventService
.findAll(loggedInUser())
.filter(this::isAlarmMessage)
.iterator()
.forEachRemaining(deviceEvents::add);
private boolean isAlarmMessage (DeviceEvent deviceEvent) {
return AlarmLevelEnum.HIGH == deviceEvent.getDeviceMessage().getLevel();
}
但是我收到了这个编译错误:
The method filter(this::isAlarmMessage) is undefined for the type
Iterable<DeviceEvent>
findAll
返回Iterable<DeviceEvent>
答案 0 :(得分:8)
filter
对象上调用 Stream
方法。
List<DeviceEvent> deviceEvents = deviceEventService
.findAll(loggedInUser()).stream()
.filter(this::isAlarmMessage)
.collect(toList());
此外,您不应创建空ArrayList
来收集结果。将Stream.collect
与适当的收集器一起使用。
如果findAll
返回Iterable
,首先需要将其转换为流。
StreamSupport.stream(
deviceEventService.findAll(loggedInUser()).spliterator(), false)
.stream() // and so on