Как выбрать enum по его имени

Я новичок в java, поэтому постоянно задаю тупые вопросы. Вот один из них. У меня есть такой enum:

public enum Color {
    BLUE("синий"),
    YELLOW("жёлтый"),
    WHITE("белый");
}

Мне очень хочется чтобы я мог волшебным образом сделав что-то такое: Color color = Color.magicMethod("синий") получить переменную color содержащую в себе то же самое, что я бы получил, если бы сделал Color color = Color.BLUE Я нашёл информацию про .valueof(), но там в качестве параметра нужно передать "BLUE" вместо "синий"

Признателен за ваше потраченное время и ответы.


Ответы (1 шт):

Автор решения: Дмитрий

Можно сделать примерно так:

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

public enum Color {
    
    BLUE("синий"),
    YELLOW("жёлтый"),
    WHITE("белый");
    
    private final String colorName;

    private Color(String colorName) {
        this.colorName = colorName;
    }
    
    private final static Map<String, Color> colors = Arrays.stream(Color.values())
            .collect(Collectors.toMap(k->k.colorName, v->v));
    
    public static Color getColorByName(String colorName) {
        return colors.get(colorName);        
    }
    
}
→ Ссылка