我正在使用谷歌的 AutoValue 生成一些配置,但在生成配置之前,我想確保條目已清理并將默認(rèn)值添加到列表中。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; }我有以下重復(fù)的代碼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 表達(dá)式來(lái)減少代碼的重復(fù)數(shù)據(jù)刪除。默認(rèn)名稱(chēng)和標(biāo)題只是一個(gè)字符串列表,如下所示,可以作為參數(shù)傳遞: public static ImmutableList<String> defaultPrimaryTitles() { return ImmutableList.of( "BBA", "TNN"); }我嘗試像這樣泛化該函數(shù):normalize(primaryAlias(), defaultPrimaryTitles());private void normalize(Optional<List<String>> configList, List<String> defaultConfig){... }不幸的是,我不太確定如何泛化并傳遞public abstract Builder primaryTitle(List<String> value)到該方法中。
傳遞一個(gè)帶有l(wèi)ambda表達(dá)式的函數(shù)來(lái)創(chuàng)建一個(gè)泛型函數(shù)
當(dāng)年話(huà)下
2023-08-16 17:31:19