2015-04-29 138 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));