Java将函数传递给方法
我试图把一个函数传递给这个方法。问题是,如果不重复同样的论点,我就无法让它起作用
public void addCartProduct(String cartId, long productId) {
updateCartProducts(cartId, productCartDto -> productCartDto.addProduct(show(productId)));
}
public void removeCartProduct(String cartId, long productId) {
updateCartProducts(cartId, productCartDto -> productCartDto.removeProduct(show(productId)));
}
private void updateCartProducts(String cartId, Function<ProductCartDto,ProductCartDto> processCart){
productCartRepository.showCart(cartId)
.map(processCart)
.map(productCartDto -> productCartRepository.updateCart(cartId, productCartDto))
.orElseThrow(() -> new NoResultException("Cannot find cart ID: " + cartId));
}
编辑:添加显示方法
public ProductBasicDto show(Long productId) {
return productRepository
.findOptionalById(productId)
.orElseThrow(() -> new NoResultException("Cannot find product ID: " + productId));
}
这里的方法show()是多余的。有没有可能让updateCartProducts负责这种方法?我不能对现有的课程做任何改变。区别在于第一个添加产品,第二个删除
# 1 楼答案
依我看,你的代码没有问题。如果您想摆脱这两个方法中的
show
方法调用,可以将其移动到updateCartProducts
方法中,并用一个BiFunction
替换Function
,该BiFunction
接受一个ProductCartDto
和一个ProductBasicDto
并生成一个ProductCartDto