在 Java 中添加/复制对象到新列表



如果列表中的对象传递条件,我想将它们复制到新列表中。

我有一个名为"inschrijvingen"的数组列表,在这个数组列表中有"Speler"的对象。

如果对象以 true 传递此方法:

/**
*
* @param speler
* @return
*/
private boolean magDeelnemen(Speler speler) {
Collections.sort(inschrijving);
return speler.getHandicap() <= minNiveau && inschrijving.size() < maxSpelers;
}

我想将其复制到一个名为"spelers"的新数组列表中 我为它编写了此方法:

/**
* Als de deadline voor inschrijven is aangekomen kan de organisatie kijken wie mee mag spelen
*/
public void isSpeler() {
for (Speler speler : this.inschrijving) {
if (magDeelnemen(speler)) {
this.spelers.add(speler);
}
}
}

我想在两个数组列表中都有对象,但是当我运行此代码时,我得到:

Exception in thread "main" java.util.ConcurrentModificationException

magDeelnemen中删除Collections.sort(inschrijving)。 如果需要对列表进行排序inschrijving,请在 isSpeller 循环之前或之后对其进行排序。在您的情况下,您在迭代时修改列表,这就是为什么引发异常并在每次迭代时进行排序的原因,这会浪费 CPU 周期。 此外,您可以使用流来创建相同的行为:

this.inschrijving.stream().sorted().filter(this::magDeelnemen).collect(Collectors.toList());

您正在循环this.inschrijving并在循环中调用该方法magDeelnemen。但是在该方法中,您正在对inschrijving进行排序。

您无法修改正在循环访问的集合,我不明白为什么必须以该方法对其进行排序,因此最好的解决方案就是删除该Collection.sort(inschrijving)

相关内容

最新更新