gpt4 book ai didi

java-8 - 用双列表示法结合函数和消费者

转载 作者:行者123 更新时间:2023-12-04 17:53:37 25 4
gpt4 key购买 nike

为了简洁起见,我经常使用双冒号表示法。

我正在编写以下方法,该方法需要一个简短的实体列表,验证它们,然后保存回数据库。

@Override@Transactional
public void bulkValidate(Collection<Entity> transactions)
{
Consumer<Entity> validator = entityValidator::validate;
validator = validator.andThen(getDao()::update);
if (transactions != null)
transactions.forEach(validator);

}

我想知道是否有避免实例化 validator 的速记语法多变的

以下语法无效(“此表达式的目标类型必须是功能接口(interface)”)
transactions.forEach((entityValidator::validate).andThen(getDao()::update));

最佳答案

你可以这样做,但你需要明确地转换......

 transactions.forEach(((Consumer<Entity>)(entityValidator::validate))
.andThen(getDao()::update));

问题是这样的方法引用 entityValidator::validate没有类型,它是一个 poly 表达式,它取决于上下文。

您还可以定义一个方法来组合这些消费者:
@SafeVarargs
private static <T> Consumer<T> combine(Consumer<T>... consumers) {
return Arrays.stream(consumers).reduce(s -> {}, Consumer::andThen);
}

并使用它:
transactions.forEach(combine(entityValidator::validate, getDao()::update))

关于java-8 - 用双列表示法结合函数和消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515968/

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