>

Java 8 스트림을 사용하여 Enum 객체 배열을 다른 Enum 객체 배열로 변환하는 방법

클래스 구조

enum QUESTIONS {
        CONTACT_QUESTION,
        ADDRESS_QUESTION,
        WORK_QUESTION
    };
 enum CODES {
       CQ,
       AQ,
       WQ
    };

입력

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

출력

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


  • 답변 # 1

    여기서 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);
    
    

관련 자료

  • 이전 performance - SQL Server 2008 페이지/행 압축 생각
  • 다음 ios - Xcode 821이 포함 된 Here Maps Premium SDK를 포함한 아카이브를 제출할 수 없습니다