Java从For循环初始化ArrayList
问题描述:
有没有办法将下面的两个命令组合成一行,其中我使用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);
答
在Java 8中,您可以使用新的streaming syntax:
List<KSE> kseList = allKSEs.stream()
.filter(KSE::isKeypress)
.collect(Collectors.toList());
前的Java 8,你有什么就是什么我会写,但我不会将这个循环压缩成一行。
+0
不幸的是,这个项目是用Java 7编写的。我没有能力去改变它。 –
+0
我知道把循环浓缩到一行是不正确的风格。我只是试图尽可能的紧凑。 –
答
如果仍使用Java 7,你可以使用Apache CollectionUtils,阿帕奇BeanUtils的和下面的代码:
ArrayList<KSE> kseList = CollectionUtils.select(allKSEs, new BeanPropertyValueEqualsPredicate("keyPress", true));
如果您在for循环,将不是其内容在每一删除或覆盖,初始化的ArrayList迭代的循环? –
有时可读性值得一两行更多。 (就我个人而言,我甚至不喜欢这种单行) – Enrichman