J'ai ce couple de fonctions et je voudrais savoir s'il est possible de passer le paramètre 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;
}
Utilisez un lambda au lieu de la référence de méthode.
// ...
.map(n -> sendSMS(n, deviceEvent))
// ...
... je voudrais savoir s'il est possible de passer le paramètre
deviceEvent.hasAlarm()
àthis::sendSMS
Non, ce n'est pas possible. Lorsque vous utilisez la référence de méthode, vous ne pouvez transmettre qu'un seul argument ( docs ).
Mais à partir du code que vous avez fourni, il n'y a pas besoin d'une telle chose. Pourquoi vérifier deviceEvent
pour chaque notification lorsqu'elle ne change pas? Meilleure façon:
if(deviceEvent.hasAlarm()) {
notificationsWithGuardians.stream().filter( ...
}
Quoi qu'il en soit, si vous le voulez vraiment, cela peut être une solution:
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) { ... }