亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

傳遞一個帶有lambda表達式的函數來創建一個泛型函數

傳遞一個帶有lambda表達式的函數來創建一個泛型函數

當年話下 2023-08-16 17:31:19
我正在使用谷歌的 AutoValue 生成一些配置,但在生成配置之前,我想確保條目已清理并將默認值添加到列表中。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;        }我有以下重復的代碼normalizePriorities():        private void normalizePriorities()        {            normalizeName();            normalizeTitle();        }        private void normalizeName() {            if (!primaryName().isPresent()) {                primaryName(defaultPrimaryNames());            } else {                List<String> providedConfigEntries = primaryName().get();                List<String> cleanConfig = sanitizeConfig(providedConfigEntries);                primaryName(cleanConfig);            }        }        private void normalizeTitle() {            if (!primaryTitle().isPresent()) {                primaryTitle(defaultPrimaryTitles());            } else {                List<String> providedConfigEntries = primaryTitle().get();                List<String> cleanConfig = sanitizeConfig(providedConfigEntries);                primaryTitle(cleanConfig);            }        }我想知道如何使用 lambda 表達式來減少代碼的重復數據刪除。默認名稱和標題只是一個字符串列表,如下所示,可以作為參數傳遞:    public static ImmutableList<String> defaultPrimaryTitles() {        return ImmutableList.of(                "BBA",                "TNN");    }我嘗試像這樣泛化該函數:normalize(primaryAlias(), defaultPrimaryTitles());private void normalize(Optional<List<String>> configList, List<String> defaultConfig){...            }不幸的是,我不太確定如何泛化并傳遞public abstract Builder primaryTitle(List<String> value)到該方法中。
查看完整描述

1 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您可以傳遞一個接受字符串列表并調用構建器方法的消費者,例如:

創建消費者并將其傳遞給normalize方法:

Consumer<List<String>>?builderConsumer?=?(x)?->?Builder.primaryName(x);
normalize(primaryAlias(),?defaultPrimaryTitles(),?builderConsumer);

以及標準化方法:

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


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號