Java从For循环初始化ArrayList

Java从For循环初始化ArrayList,java,arraylist,Java,Arraylist,有没有办法将下面的两个命令组合成一行,在这里我使用for循环初始化ArrayList ArrayList<KSE> kseList = new ArrayList<KSE>(); for (KSE k : allKSEs) if (k.isKeyPress()) kseList.add(k); 在Java 8中,您可以使用新的: List kseList=allKSEs.stream() .filter(KSE::isKeypress) .collect(Collect

有没有办法将下面的两个命令组合成一行,在这里我使用for循环初始化ArrayList

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

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

List 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));
ArrayList kseList=CollectionUtils.select(allKSEs,新的BeanPropertyValueEqualsPredicate(“keyPress”,true));

如果在for循环中初始化ArrayList,它的内容不会在循环的每次迭代中被删除或覆盖吗?有时可读性比一行或两行更重要。(我个人甚至不喜欢if的一行)不幸的是,这个项目是用Java7编写的。我没有能力改变这一点。我知道把循环压缩成一行是不合适的。我只是想让它尽可能紧凑。
List<KSE> kseList = allKSEs.stream()
    .filter(KSE::isKeypress)
    .collect(Collectors.toList());
ArrayList<KSE> kseList = CollectionUtils.select(allKSEs, new BeanPropertyValueEqualsPredicate("keyPress", true));