我有
ProductSettings
和ProductType
。产品设置决定是否启用产品类型。
ProductSettings productSettings = new ProductSettings()
.setIsTreasuryInfoEnabled(true)
.setIsTreasurySwiftInfoEnabled(true)
.setIsTreasuryExecutionControlEnabled(true)
.setIsAcceptEnabled(true);
public enum ProductType {
INFO,
INFOSWIFT,
BUDGETCONTROL,
ACCEPT,
DIRECTACCOUNTCONTROL
我如何使用功能界面和 vs 任务填充
enabledProductTypes
集 - 通过产品类型启用设置?
Set<ProductType> enabledProductTypes = EnumSet.noneOf(ProductType.class);
我创建了地图
static Map<ProductType, Predicate<ProductSettings>> mapGetter = new HashMap<>();
static Map<ProductType, BiConsumer<ProductSettings, Boolean>> mapSetter = new HashMap<>();
并用这样的谓词填写
mapGetter
:
mapGetter.put(ProductType.ACCEPT, ProductSettings::getIsAcceptEnabled);
mapGetter.put(ProductType.INFO,ProductSettings::getIsTreasuryInfoEnabled);
并用 BiConsumer 填写
mapSetter
,如下所示:
mapSetter.put(ProductType.ACCEPT, ProductSettings::setIsAcceptEnabled);
mapSetter.put(ProductType.INFO, ProductSettings::setIsTreasuryInfoEnabled);
但是如何使用它我不明白。 我想我应该迭代我的地图
是的,您应该迭代您的地图。
ProductSettings settings = /* ... */;
Set<ProductType> enabledProductTypes = EnumSet.noneOf(ProductType.class);
for (Map.Entry<ProductType, Predicate<ProductSettings>> entry : mapGetter) {
ProductType type = entry.getKey();
Predicate<ProductSettings> enabled = entry.getValue();
if (enabled.test(settings)) {
enabledProductTypes.add(type);
}
}
并且:
ProductSettings settings = /* ... */;
Set<ProductType> enabledProductTypes = /* ... */
for (Map.Entry<ProductType, BiConsumer<ProductSettings, Boolean>> entry : mapSetter) {
ProductType type = entry.getKey();
BiConsumer<ProductSettings, Boolean>> setter = entry.getValue();
setter.accept(settings, enabledProductTypes.contains(type));
}