lapots
lapots

Reputation: 13395

map each array value of enum to enum value

I've got enum that looks like this

public enum ContainerEnum {
    CONTAINER_1(new ElementTypeEnum[] {
        ElementTypeEnum.TYPE_1,
        ElementTypeEnum.TYPE_2
    }),
    CONTAINER_2(new ElementTypeEnum[] {
        ElementTypeEnum.TYPE_3,
        ElementTypeEnum.TYPE_4
    });
    ....
}

All ElementTypeEnum items are unique for each Container element.

Now I have an array of possible containers

ContainerEnum[] containers = ContainerEnum.values();

But how to map each ElementTypeEnum entry to each ContainerEnum key? I mean to get pairs like this

{ ElementTypeEnum.TYPE_1, CONTAINER_1 },
{ ElementTypeEnum.TYPE_2, CONTAINER_1 },
{ ElementTypeEnum.TYPE_3, CONTAINER_2 },
{ ElementTypeEnum.TYPE_4, CONTAINER_2 }

Upvotes: 2

Views: 68

Answers (1)

Eugene
Eugene

Reputation: 120858

EnumSet.allOf(ContainerEnum.class)
       .stream()
       .flatMap(x -> Arrays.stream(x.getElementTypeEnums()).map(y -> new SimpleEntry<>(x, y)))
       .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

assuming something like a getter getElementTypeEnums() exists.

Upvotes: 4

Related Questions