Java 从 for 循环初始化 ArrayList



有没有办法将下面的两个命令合并成一行,我使用 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 中,您可以使用新的流语法:

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

在Java 8之前,你所拥有的就是我会写的,尽管我不会将循环压缩成一行。

如果你仍然使用Java 7,你可以使用Apache CollectionUtils,Apache BeanUtils和以下代码:

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

最新更新