Похоже, вы на самом деле имеете дело с диапазонами для всех перечислений.Единственная разница между E
и остальными состоит в том, что остальные имеют только одно значение в диапазоне.
Я бы изменил перечисления, чтобы они взяли либо low/high
, либо какой-то Range
объект.
Вот пример использования IntStream.range
, который мне нравится из-за возможности использования всех его приятных встроенных функций IntStream
.
public enum SampleEnum {
A( () -> IntStream.range(1, 2) ),
B( () -> IntStream.range(2, 3) ),
C( () -> IntStream.range(3, 4) ),
D( () -> IntStream.range(4, 5) ),
E( () -> IntStream.range(5, 101) );
private Supplier<IntStream> rangeFactory = null;
private SampleEnum(Supplier<IntStream> rangeFactory){
this.rangeFactory = rangeFactory;
}
public IntStream getRange() {
return rangeFactory.get();
}
}
А вот пример использования для проверкиесли число находится в пределах диапазона:
assertFalse( SampleEnum.A.getRange().anyMatch( i -> i == 0) );
assertTrue( SampleEnum.A.getRange().anyMatch( i -> i == 1) );
assertFalse( SampleEnum.A.getRange().anyMatch( i -> i == 2) );
assertFalse( SampleEnum.C.getRange().anyMatch( i -> i == 2) );
assertTrue( SampleEnum.C.getRange().anyMatch( i -> i == 3) );
assertFalse( SampleEnum.C.getRange().anyMatch( i -> i == 4) );
assertFalse( SampleEnum.E.getRange().anyMatch( i -> i == 4) );
assertTrue( SampleEnum.E.getRange().anyMatch( i -> i == 5) );
assertTrue( SampleEnum.E.getRange().anyMatch( i -> i == 100) );
assertFalse( SampleEnum.E.getRange().anyMatch( i -> i == 101) );