我是函数范式的新手,想知道如何在创建新对象之前进行一些查询?
@Override
public Mono<Order> create(CreateOrderRequest specs) {
//itemRepository.findAll(specs.getItemCodes()) //returns Flux<Item>
final Order newOrder = new Order(items);
return orderRepository.insert(newOrder)
.switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "Failed to create order")));
}
如何以非阻塞方式链接注释的代码?查询返回Flux<Item>
,而Order构造函数需要List<Item>
答案 0 :(得分:1)
您可以使用collectList()
方法,该方法会将Flux<Item>
更改为Mono<List<Item>>
。
之后,您可以使用map()
方法将List<Item>
转换为Order
对象,并使用flatMap()
方法来获取保存的结果。
例如:
return itemRepository
.findAll(specs.getItemCodes())
.collectList()
.map(Order::new)
.flatMap(orderRepository::insert)
.switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "Failed to create order")));