2015-04-29 2 views
1

Есть ли способ объединить две команды ниже в одну строку, где я инициализирую ArrayList с помощью цикла for?Java Initialize ArrayList From For-Loop

ArrayList<KSE> kseList = new ArrayList<KSE>(); 
for (KSE k : allKSEs) if (k.isKeyPress()) kseList.add(k); 

переменная allKSEs просто родовое Collection

Collection<KSE> allKSEs = KSE.parseSessionToKSE(ksListString); 
+0

Если инициализировать ArrayList в вашем цикл, не его содержимое будет удалено или перезаписаны при каждом итерация петли? –

+1

Иногда читаемость стоит одной или двух строк. (Лично мне даже не нравится однострочный-для-if) – Enrichman

ответ

3

В Java 8, вы можете использовать новый streaming syntax:

List<KSE> kseList = allKSEs.stream() 
    .filter(KSE::isKeypress) 
    .collect(Collectors.toList()); 

Pre-Java 8, что у вас есть то, что Я бы написал, хотя я бы не конденсировал цикл в одну строку.

+0

К сожалению, проект написан на Java 7. У меня нет возможности изменить это. –

+0

Я знаю, что это не правильный стиль, чтобы конденсировать цикл в одну строку. Я просто старался сделать его максимально компактным. –

0

Если вы все еще используете Java 7 вы можете использовать Apache CollectionUtils, Apache BeanUtils и следующий код:

ArrayList<KSE> kseList = CollectionUtils.select(allKSEs, new BeanPropertyValueEqualsPredicate("keyPress", true));