2015-04-29 142 views
1

有没有办法将下面的两个命令组合成一行,其中我使用for-loop来初始化ArrayList?Java从For循环初始化ArrayList

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

如果您在for循环,将不是其内容在每一删除或覆盖,初始化的ArrayList迭代的循环? –

+1

有时可读性值得一两行更多。 (就我个人而言,我甚至不喜欢这种单行) – Enrichman

回答

3

在Java 8中,您可以使用新的streaming syntax

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

前的Java 8,你有什么就是什么我会写,但我不会将这个循环压缩成一行。

+0

不幸的是,这个项目是用Java 7编写的。我没有能力去改变它。 –

+0

我知道把循环浓缩到一行是不正确的风格。我只是试图尽可能的紧凑。 –

0

如果仍使用Java 7,你可以使用Apache CollectionUtils,阿帕奇BeanUtils的和下面的代码:

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