Как получить доступ к Enum массивов - PullRequest
2 голосов
/ 03 мая 2019

У меня есть два набора Продуктов

public enum ProductType {

    FOUNDATION_OR_PAYMENT ("946", "949", "966"),
    NOVA_L_S_OR_SESAM ("907", "222");

    private String[] type;

    ProductType(String... type) {
        this.type = type;
    }
}

Затем, учитывая значение "actualProductType", мне нужно проверить, является ли оно частью productType .. Как мне это сделать ..

isAnyProductTypes(requestData.getProductType(), ProductType.NOVA_L_S_SESAM)

 public boolean isAnyProductTypes(String actualProductType, ProductType productTypes) {
        return Arrays.stream(productTypes).anyMatch(productType -> productType.equals(actualProductType));
    }

Я получаю сообщение об ошибке в этой части Arrays.stream (productTypes)

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Поскольку ваше перечисление не меняется, вы можете построить Map внутри него для более быстрого поиска:

public enum ProductType {


    FOUNDATION_OR_PAYMENT("946", "949", "966"),
    NOVA_L_S_OR_SESAM("907", "222");

    static Map<String, ProductType> MAP;

    static {
        MAP = Arrays.stream(ProductType.values())
                    .flatMap(x -> Arrays.stream(x.type)
                                        .map(y -> new SimpleEntry<>(x, y)))
                    .collect(Collectors.toMap(Entry::getValue, Entry::getKey));
    }

    private String[] type;

    ProductType(String... type) {
        this.type = type;
    }

    public boolean isAnyProductTypes(String actualProductType, ProductType productTypes) {
        return Optional.ofNullable(MAP.get(actualProductType))
                       .map(productTypes::equals)
                       .orElse(false);
    }
}
1 голос
/ 03 мая 2019

вы должны изменить тип на Set<String>, а также конструктор

ProductType(String... type) {
    this.type = new HashSet<>(Arrays.asList(type));
}

и поиск будет очень простым

return productType.getType().contains(requestData.getProductType())
...