Я становлюсь немного параноиком, когда вижу такие функции
@Override
public Mono<List<UserbaseEntityResponse.GroupPrincipal>> merge(UserbaseValidatorResult userbaseValidatorResult,
UserbaseEntityResponse userbaseEntityResponse1,
UserbaseEntityResponse userbaseEntityResponse2) {
List<UserbaseEntityResponse.GroupPrincipal> conflictGroupPrincipal = new ArrayList<>();
userbaseValidatorResult.getResult().getConflicts().forEach(conflicts -> conflicts.forEach(conflict -> {
UserbaseEntityResponse.GroupPrincipal gp1 = findGroupPrincipalFromGroupName(userbaseEntityResponse1, conflict.getGroupName());
UserbaseEntityResponse.GroupPrincipal gp2 = findGroupPrincipalFromGroupName(userbaseEntityResponse2, conflict.getGroupName());
if (userbaseEntityResponse1.getUserbaseId().equals(conflict.getUserbaseId())) {
conflictGroupPrincipal.add(ImmutableGroupPrincipal.copyOf(gp1)
.withName(conflict.getGroupId() + "-" + conflict.getUserbaseId()));
} else if (userbaseEntityResponse2.getUserbaseId().equals(conflict.getUserbaseId())) {
conflictGroupPrincipal.add(ImmutableGroupPrincipal.copyOf(gp2)
.withName(conflict.getGroupId() + "-" + conflict.getUserbaseId()));
}
}));
return Mono.just(conflictGroupPrincipal);
}
Весь приведенный выше код return не заключен в Mono, и я думаю, что все операторы выполняются во время сборки. Поскольку в любой из этих операций нет побочных эффектов, все в порядке?
Более важный вопрос заключается в том, когда мы должны оборачивать методы внутри defer, как показано ниже.
public Mono<List<>> merge(args...) {
return Mono.defer(() -> doMerge(args...));
}
public List<> doMerge(args...) {
// business logic
}
* 1008 выполнить n / w операций, мы должны отложить выполнение. Я правильно понимаю?