-1

I have ProductSettings and ProductType. Product settings determine whether product types are enabled or not.

ProductSettings productSettings = new ProductSettings()
            .setIsTreasuryInfoEnabled(true)
            .setIsTreasurySwiftInfoEnabled(true)
            .setIsTreasuryExecutionControlEnabled(true)
            .setIsAcceptEnabled(true);

public enum ProductType {
INFO,
INFOSWIFT,
BUDGETCONTROL,
ACCEPT,
DIRECTACCOUNTCONTROL

how can i fill the enabledProductTypes set using functional interfaces and vs task - enable settings by having product types?

Set<ProductType> enabledProductTypes = EnumSet.noneOf(ProductType.class);

I created map

static Map<ProductType, Predicate<ProductSettings>> mapGetter = new HashMap<>();

static Map<ProductType, BiConsumer<ProductSettings, Boolean>> mapSetter = new HashMap<>();

and filled out mapGetter with Predicate like this:

mapGetter.put(ProductType.ACCEPT, ProductSettings::getIsAcceptEnabled);


mapGetter.put(ProductType.INFO,ProductSettings::getIsTreasuryInfoEnabled);

and filled out mapSetter with BiConsumer like this:

mapSetter.put(ProductType.ACCEPT, ProductSettings::setIsAcceptEnabled);

mapSetter.put(ProductType.INFO, ProductSettings::setIsTreasuryInfoEnabled);

but how to use it I can't understand. I guess i shoul iterate by my map

1 Answer 1

1

Yes, you should iterate through your Maps.

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);
    }
}

And:

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));
}
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.