gpt4 book ai didi

Java 将函数传递给方法

转载 作者:行者123 更新时间:2023-12-02 11:32:06 26 4
gpt4 key购买 nike

我正在尝试将函数传递给该方法。问题是,如果不重复相同的论点,我就无法使其发挥作用。

 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 负责此方法?我无法对现有类(class)进行任何更改。区别在于第一个添加产品,第二个删除产品

最佳答案

IMO 您的代码没有任何问题。如果您想摆脱这两个方法中的 show 方法调用,可以将其移至 updateCartProducts 方法中,并将 Function 替换为一个 BiFunction,它采用 ProductCartDtoProductBasicDto 并生成 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));
}

关于Java 将函数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49221720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com