Java将函数传递给方法
我正在尝试将一个函数传递给该方法。问题是,如果不重复同样的论点,我就无法使它起作用Java将函数传递给方法,java,function,Java,Function,我正在尝试将一个函数传递给该方法。问题是,如果不重复同样的论点,我就无法使它起作用 public void addCartProduct(String cartId, long productId) { updateCartProducts(cartId, productCartDto -> productCartDto.addProduct(show(productId))); } public void removeCartProduct(Strin
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));
}
这里方法show()是多余的。是否有可能让updateCartProducts负责此方法?我无法对现有类进行任何更改。不同之处在于,第一个添加产品,第二个删除,因为您的代码没有问题。如果您想摆脱这两个方法中的
show
方法调用,可以将其移动到updateCartProducts
方法中,并将函数
替换为BiFunction
,该函数接受productCartTo
和ProductBasicDto
并生成productCartTo
public void addCartProduct(String cartId, long productId) {
updateCartProducts(cartId, (productCartDto, productBasicDto) -> productCartDto.addProduct(productBasicDto));
}
public void removeCartProduct(String cartId, long productId) {
updateCartProducts(cartId, (productCartDto, productBasicDto) -> productCartDto.removeProduct(productBasicDto));
}
private void updateCartProducts(String cartId, BiFunction<ProductCartDto, ProductBasicDto, ProductCartDto> processCart){
//The code from show method
ProductBasicDto productBasicDto = productRepository
.findOptionalById(productId)
.orElseThrow(() -> new NoResultException("Cannot find product ID: " + productId));
productCartRepository.showCart(cartId)
.map(processCartDto -> processCart.apply(processCartDto, productBasicDto))
.map(productCartDto -> productCartRepository.updateCart(cartId, productCartDto))
.orElseThrow(() -> new NoResultException("Cannot find cart ID: " + cartId));
}
public void addCartProduct(字符串cartId,长productId){
updateCartProducts(cartId,(productCartDto,productBasicDto)->productCartDto.addProduct(productBasicDto));
}
public void removeCartProduct(字符串cartId,长productId){
updateCartProducts(cartId,(productCartDto,productBasicDto)->productCartDto.removeProduct(productBasicDto));
}
私有void updateCartProducts(字符串cartId、双功能processCart){
//来自show方法的代码
ProductBasicDto ProductBasicDto=productRepository
.findOptionalById(产品ID)
.orelsetrow(()->new NoResultException(“找不到产品ID:+productId”);
productCartRepository.showCart(cartId)
.map(processCartDto->processCart.apply(processCartDto,productBasicDto))
.map(productCartDto->productCartRepository.updateCart(cartId,productCartDto))
.orelsetrow(()->new NoResultException(“找不到购物车ID:+cartId));
}
您还没有显示show
方法我不确定您想在这里改进什么,因为addProduct和removeProduct都使用了show方法返回的内容。啊,对不起,伙计们,我添加了show方法。并且add/remove方法也会返回ProductCartDto
public void addCartProduct(String cartId, long productId) {
updateCartProducts(cartId, (productCartDto, productBasicDto) -> productCartDto.addProduct(productBasicDto));
}
public void removeCartProduct(String cartId, long productId) {
updateCartProducts(cartId, (productCartDto, productBasicDto) -> productCartDto.removeProduct(productBasicDto));
}
private void updateCartProducts(String cartId, BiFunction<ProductCartDto, ProductBasicDto, ProductCartDto> processCart){
//The code from show method
ProductBasicDto productBasicDto = productRepository
.findOptionalById(productId)
.orElseThrow(() -> new NoResultException("Cannot find product ID: " + productId));
productCartRepository.showCart(cartId)
.map(processCartDto -> processCart.apply(processCartDto, productBasicDto))
.map(productCartDto -> productCartRepository.updateCart(cartId, productCartDto))
.orElseThrow(() -> new NoResultException("Cannot find cart ID: " + cartId));
}