この関数がいくつかあり、パラメータdeviceEvent.hasAlarm()
を.map(this::sendSMS)
に渡すことが可能かどうかを知りたい
private void processAlarm (DeviceEvent deviceEvent) {
notificationsWithGuardians.stream()
.filter (notification -> notification.getLevels().contains(deviceEvent.getDeviceMessage().getLevel()))
.map(this::sendSMS)
.map(this::sendEmail);
}
private DeviceAlarmNotification sendSMS (DeviceAlarmNotification notification, DeviceEvent deviceEvent) {
if (deviceEvent.hasAlarm()) {
}
return notification;
}
メソッド参照の代わりにラムダを使用します。
// ...
.map(n -> sendSMS(n, deviceEvent))
// ...
...パラメータ
deviceEvent.hasAlarm()
をthis::sendSMS
に渡すことが可能かどうかを知りたい
いいえ、できません。メソッド参照を使用する場合、渡すことができる引数は1つだけです( docs )。
しかし、あなたが提供したコードからは、そのようなことは必要ありません。通知が変更されていないときにすべての通知に対してdeviceEvent
をチェックする理由より良い方法:
if(deviceEvent.hasAlarm()) {
notificationsWithGuardians.stream().filter( ...
}
とにかく、本当に望むなら、これは解決策になることができます:
notificationsWithGuardians.stream()
.filter (notification -> notification.getLevels().contains(deviceEvent.getDeviceMessage().getLevel()))
.map(notification -> Pair.of(notification, deviceEvent))
.peek(this::sendSMS)
.forEach(this::sendEmail);
private void sendSMS(Pair<DeviceAlarmNotification, DeviceEvent> pair) { ... }