2016-03-02 2 views
-1

Я программирую на Java и хочу добавить все значения Enum в FXCollections.observableArrayList, который будет использоваться для заполнения ComboBox.
Он отлично работает со следующим кодом:Добавить значения Enum для наблюдаемогоArrayList.with lambdas

for(OutputType t : OutputType.values()) { 
    outputTypes.add(t.toString()); 
} 

Как я могу сделать это с одной облицовкой с помощью лямбды?

+3

Почему один лайнер? Ваш код читаем, не разрушайте его. – Maroun

+0

Значит, вы предпочтете, чтобы это было ниже, чем в oneliner? – Pabi

+0

Если я уже написал это, я не буду тратить время на то, чтобы сделать oneline это. – Maroun

ответ

3
Arrays.stream(OutputType.values()).forEach(o -> outputTypes.add(o.toString())); 
+0

Спасибо, что даже сохраняет преобразование в список. – Pabi

+0

@Pabi: В этом аспекте на самом деле нет большой разницы, поскольку 'Arrays.asList()' просто возвращает тонкую оболочку ('Arrays.ArrayList') массива, которая аналогична для случая' Arrays. поток (Object []) '. Оказывается, ваш исходный код является лучшим в таком аспекте, как никакой дополнительный объект не создается –

0

Ну, выяснилось. Проблема была OutputType.values() возвращает массив.
Так с Arrays.asList() я могу использовать .forEach():

Arrays.asList(OutputType.values()).forEach(OutputType -> outputTypes.add(OutputType.toString())); 
+0

Обратите внимание на соглашение об именах –

+0

Какое соглашение мне не хватает? – Pabi

+0

имя переменной/параметра должно быть в 'camelCase' вместо' PascalCase' –

Смежные вопросы