tl; dr
EnumSet
.copyOf( List.of( Month.JUNE , Month.FEBRUARY ) )
.iterator()
.next()
.toString()
ФЕВРАЛЬ
Подробности
Если ваш приоритетный номер совпадает с порядковым номером каждого объекта перечисления место в определении enum, ваша проблема становится проще. То есть, если приоритет первого объекта перечисления равен 1, а второго - 2, а третий - 3 и т. Д.
Пример List
объектов перечисления.
List < Month > months = List.of( Month.JUNE , Month.FEBRUARY );
EnumSet
- это реализация Set
, оптимизированная для обработки объектов enum. EnumSet
занимает мало памяти и выполняется очень быстро.
Set < Month > set = EnumSet.copyOf( months );
Порядок итератора EnumSet
соответствует порядку, в котором объекты перечисления определены в этом перечислении. Таким образом, в нашем примере с июня по февраль февраль стоит первым в наборе. Мы просто запрашиваем первый объект у его итератора для решения вашего вопроса.
Month month = set.iterator().next();
month.toString (): ФЕВРАЛЬ
Так что вам на самом деле не нужно имейте это prio
поле участника в вашем перечислении. Вы можете получить порядковый номер каждого объекта перечисления, добавив его к int
, возвращенному ошибочно названным методом Enum::ordinal
.
Month.DECEMBER.ordinal() + 1
12
Пропустить prio
аргумент вашего конструктора enum. Добавить метод getPriority
.
package work.basil.example;
import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
public enum ProgramType
{
VCX( "VProgram" ), ACF( "AProgram" ), IFL( "IProgram" );
private String displayName;
ProgramType ( final String name )
{
this.displayName = name;
}
public String getDisplayName ( )
{
return this.displayName;
}
public int getPriorityLevel ( )
{
int priority = this.ordinal() + 1; // `Enum::ordinal` method is misnamed, actually returning a zero-based index number rather than one-based ordinal number.
return priority;
}
static ProgramType highestPriority ( List < ProgramType > programTypes )
{
Objects.requireNonNull( programTypes , "Received null list of program types. Message # 539b0b72-d28c-4e54-b82e-2e3b4d760f28." );
if ( programTypes.isEmpty() ) { throw new IllegalArgumentException( "No program types specified (empty list). Message # 485b0856-a384-4090-aa5f-0d412cb0c8f6." );}
ProgramType pt =
EnumSet
.copyOf( programTypes )
.iterator()
.next()
;
return pt ; // Or return pt.getPriorityLevel() if the number was your intention.
}
}
Пример использования.
List < ProgramType > programTypes = List.of( ProgramType.IFL , ProgramType.ACF );
ProgramType pt = ProgramType.highestPriority( programTypes );
pt.toString () = ACF
pt.getPriorityLevel () = 2
pt.getDisplayName () = AProgram