Использование Java 8 Streams, как преобразовать массив объектов Enum в другой массив Enum - PullRequest
0 голосов
/ 15 февраля 2019

Использование Java 8 Streams, как преобразовать массив объектов Enum в другой массив объектов Enum

Структура класса

 enum QUESTIONS {
        CONTACT_QUESTION,
        ADDRESS_QUESTION,
        WORK_QUESTION
    };

 enum CODES {
       CQ,
       AQ,
       WQ
    };

INPUT

CODES[] firstSet_Short = {CODES.CQ, CODES.AQ} 

ВЫХОД

QUESTIONS[] firstSet_Long = {QUESTIONS.CONTACT_QUESTION, QUESTIONS.ADDRESS_QUESTION}

1 Ответ

0 голосов
/ 15 февраля 2019

Здесь я сопоставляю инициалы кодов, таких как C***_Q***:

CODES[] firstSet_Short = {CODES.CQ, CODES.AQ};

List<QUESTIONS> result = Arrays.stream(firstSet_Short)
        .map(c -> Arrays.stream(QUESTIONS.values())
                .filter(q -> q.toString().matches(c.toString().charAt(0) + ".+_" + c.toString().charAt(1) + ".+"))
                .findFirst().orElse(null))
        .collect(Collectors.toList()); //or .toArray(QUESTIONS[]::new); if you want array

System.out.println(result);

Выход

[CONTACT_QUESTION, ADDRESS_QUESTION]

Лучшим способом было бысохранить отображение в CODES, например:

enum CODES {
    CQ(QUESTIONS.CONTACT_QUESTION),
    AQ(QUESTIONS.ADDRESS_QUESTION),
    WQ(QUESTIONS.WORK_QUESTION);

    private QUESTIONS question;

    CODES(QUESTIONS question) {
        this.question = question;
    }

    public QUESTIONS getQuestion() {
        return question;
    }
}

И тогда ваш код станет:

QUESTIONS[] result = Arrays.stream(firstSet_Short)
        .map(CODES::getQuestion)
        .toArray(QUESTIONS[]::new);
...