Java 使用lamba表达式传递函数以生成泛型函数

Java 使用lamba表达式传递函数以生成泛型函数,java,lambda,refactoring,generic-programming,code-duplication,Java,Lambda,Refactoring,Generic Programming,Code Duplication,我正在使用google的AutoValue生成一些配置,但在生成配置之前,我希望确保对条目进行清理,并将默认值添加到列表中 “自动赋值”部分如下所示: @AutoValue.Builder public abstract static class Builder { public abstract Builder primaryName(List<String> value); public abstract Optional<

我正在使用google的AutoValue生成一些配置,但在生成配置之前,我希望确保对条目进行清理,并将默认值添加到列表中

“自动赋值”部分如下所示:

    @AutoValue.Builder
    public abstract static class Builder {
        public abstract Builder primaryName(List<String> value);

        public abstract Optional<List<String>> primaryName();

        public abstract Builder primaryTitle(List<String> value);

        abstract Optional<List<String>> primaryTitle();

        abstract Config autoBuild();

        public Config build() {

            normalizePriorities();
            EntitySourcePrioritizationConfig config = autoBuild();
            return config;
        }
我想知道如何使用lambda表达式来减少代码的重复数据消除

默认名称和标题只是可以作为参数传递的字符串列表,如下所示:

    public static ImmutableList<String> defaultPrimaryTitles() {
        return ImmutableList.of(
                "BBA",
                "TNN");
    }

    public static ImmutableList<String> defaultPrimaryNames() {
        return ImmutableList.of(
                "SNS Inc.",
                "ABC Corp.");
    }
public静态不可变列表defaultPrimaryTitles(){
返回ImmutableList.of(
“工商管理学士”,
“TNN”);
}
公共静态不可变列表defaultPrimaryNames(){
返回ImmutableList.of(
“SNS公司”,
“ABC公司”);
}
我尝试将函数一般化如下:

normalize(primaryAlias(), defaultPrimaryTitles());

private void normalize(Optional<List<String>> configList, List<String> defaultConfig){

...            
}
规范化(primaryAlias(),defaultPrimaryTitles());
私有void规范化(可选configList、List defaultConfig){
...            
}
不幸的是,我不太确定如何泛化并将
公共抽象生成器primaryTitle(列表值)
传递到方法中。

您可以传递一个接受字符串列表并调用生成器方法的,例如:

创建消费者并将其传递给
normalize
方法:

Consumer<List<String>> builderConsumer = (x) -> Builder.primaryName(x);
normalize(primaryAlias(), defaultPrimaryTitles(), builderConsumer);
consumerbuilderconsumer=(x)->Builder.primaryName(x);
规范化(primaryAlias()、defaultPrimaryTitles()、builderConsumer);
以及规范化方法:

private void normalize(ImmutableList<String> configList, List<String> defaultConfig, Consumer<List<String>> builderConsumer) {
    List<String> cleanConfig = new ArrayList<>();
    // ...
    builderConsumer.accept(cleanConfig);
}
private void规范化(ImmutableList configList、List defaultConfig、Consumer builderConsumer){
List cleanConfig=new ArrayList();
// ...
builderConsumer.accept(cleanConfig);
}

拥有
公共摘要生成器primaryTitle(列表值)的意义是什么
抽象可选primaryTitle()重载?它们的用途是什么?这就是AutoValue的工作原理:非常感谢!我试图使用供应商,但我无法确定参数。消费者的魅力!再次非常感谢!
private void normalize(ImmutableList<String> configList, List<String> defaultConfig, Consumer<List<String>> builderConsumer) {
    List<String> cleanConfig = new ArrayList<>();
    // ...
    builderConsumer.accept(cleanConfig);
}