Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将函数传递给方法_Java_Function - Fatal编程技术网

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));
}