Вы должны переосмыслить, действительно ли List
является подходящим типом данных для чего-то, содержащего уникальные элементы.A Set
обычно более уместен.
Тогда, если вы заботитесь о производительности, вы можете реализовать его как
public static Set<A> getValuesExclusion(A... exclusions){
return exclusions.length == 0? EnumSet.allOf(A.class):
EnumSet.complementOf(EnumSet.of(exclusions[0], exclusions));
}
Класс EnumSet
специально разработан для удержания элементовenum
тип, просто сохраняя бит для каждой константы, чтобы определить, присутствует она или отсутствует.Это позволяет выполнять такие операции, как complementOf
, который просто переворачивает все биты с помощью одной операции «двоичное не», без необходимости фактически проходить константы enum
.
Если вы настаиваете на возвращении List
,Вы можете сделать это так же просто, как
public static List<A> getValuesExclusion(A... exclusions){
return new ArrayList<>(exclusions.length == 0? EnumSet.allOf(A.class):
EnumSet.complementOf(EnumSet.of(exclusions[0], exclusions)));
}