gpt4 book ai didi

java - Collection> 在 Java 8 中的功能应用

转载 作者:行者123 更新时间:2023-11-30 06:55:30 25 4
gpt4 key购买 nike

我有这个:

class Converter<A,B> {
Collection<BiConsumer<A,B>> fieldconverters=...
Class<B> targetclazz; // Set through constructor
...
public B convert(A source) {
B target=targetclazz.newInstance();
for (BiConsumer<A,B> converter:fieldconverters)
converter.accept(source,target);
return target;
}
}

将 A 和 B 视为 bean,这样 fieldconverter 看起来像

(source,target)->target.setWhatever(someFunction(source.getWhatever()));

我的问题:是否可以用函数式的方式编写convert,这样它就可以开始

public B convert(A source) {
B target=targetclazz.newInstance();
fieldconverters.stream().<this-and-that-with-source-and-target>;
return target;
}

这可能吗?明智吗?我现在考虑这个问题有一段时间了,还没有找到解决方案(尽管有很好的旧 for 循环......)。我是不是遗漏了什么,或者我对这个星座中的功能性方法的想法完全错误?

最佳答案

你可以做到

fieldconverters.forEach(converter -> converter.accept(source, target));

顺便说一句,而不是 Class<B>作为一个字段并通过反射创建目标,考虑有一个 Supplier<B>作为一个领域。那么你的convert方法可以写成

public B convert(A source) {
B target = targetSupplier.get();
fieldconverters.forEach(converter -> converter.accept(source, target));
return target;
}

您可以使用 lambda 表达式来创建 Supplier<B>当您调用构造函数时。

关于java - Collection<BiConsumer<A,B>> 在 Java 8 中的功能应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309693/

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