Рассмотрим следующие классы:
ClassA {
}
ClassB {
private ClassA classA;
// getters and setters
}
Поскольку метод peek
недоступен в Optional
, считается ли это злоупотреблением методом Optional#map
:
return myService.findA()
.flatMap(a -> myService.findB(a) // also returns optional
.map(b -> {
b.setClassA(a);
return b;
}))
.map(d -> MyType.of(d)) // MyType being other class
.orElse(MyType.empty());
Это также можно записать так:
Optional<ClassA> optionalA = myService.findA();
if (optionalA.isPresent()) {
Optional<ClassB> optionalB = myService.findB(optionalA.get());
if (optionalB.isPresent()) {
ClassB classB = optionalB.get();
classB.setClassA(optionalA.get());
return MyType.of(classB);
}
return MyType.empty();
Обе реализации выполняют одну и ту же логику, следует ли отдавать предпочтение одной над другой?