Есть пара вещей, которые вы можете переосмыслить.
Прежде всего, передача Set<String> colors
вместо List
будет иметь больше смысла, поскольку кажется, что Color
- это перечисление для начала. Тогда, возможно, было бы более разумно проверить по equalsIgnoreCase
, чтобы red
или RED
все равно производили экземпляр enum. Также if statement
, вероятно, намного более понятен для проверки на возможный нулевой ввод. И последний поток в обратном направлении - из enum
будет иметь больше смысла (также избегая нулевой проверки). Я не выполнил рекомендации выше, просто для простоты.
public Builder withColors(List<String> colors) {
if(colors == null){
this.colors = Collection.emptyList();
}
this.colors = EnumSet.allOf(Color.class)
.stream()
.filter(x -> colors.stream().anyMatch(y -> x.toString().equals(y)))
.collect(Collectors.toList());
return this;
}