Pracując w Kotlinie bardzo spodobało mi się to że nie tylko dla streamów ale też na obiektach można wywołać funkcje (let itp).
Pytanie czy można coś takiego zrobić w Javie?
Póki co jedyne na co wpadłem to żeby opakować obiekt w Optionala i wówczas wywoływać funkcje, np.:
@GetMapping("/some")
public ResponseEntity<SomethingDto> getSome() {
return Optional.ofNullable(some.getSomething())
.map(some::doSomething)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
Niby spoko ale jakieś to takie dziwne żeby wszystko w Optionala ładować. Jakieś lepsze pomysły?
@Edit dla @jarekr000000
Mając jakiś strumień w Javie, mogę go sobie przetwarzać w taki sposób:
Stream<Customer> customers = customerList.stream()
.map(...)
.filter(...)
.map(...)
.....
Jest to bardzo wygodne i przejrzyste - wiadomo.
Jeśli spojrzymy na Kotlina to można robić coś podobnego ale nie mając kolekcji, np.:
call.receive<CustomerCmd>()
.let { customers.save(it) }
.let { resolve(it) }
.run { call.respond(statusCode, body) }
I teraz chciałbym uzyskać coś podobnego w Javie i się zastanawiam czy to w ogóle możliwe. Mając Optionala mam już jakiś tego zalążek ale zastanawiam się czy można to zrobić lepiej.
na obiektach
i nazywa się to metody. Służy do tego kropka.obiekt.metoda()
. Java to wspiera. (sorry, poranna złośliwość. nie do końca wiem czego szukasz).