J'ai un TreeSet qui contient des entiers. Je boucle dans cet ensemble et "consomme" les entiers un par un. Au cours de chaque boucle, je dois augmenter de 1 les entiers restants, non consommés.
Par exemple, je commence avec un ensemble de quatre valeurs : 2, 3, 5, 8
. Après la première boucle où je consomme 2
le résultat devrait être un ensemble avec ce contenu 4, 6 , 9
. Après la deuxième boucle, où 4
est consommée, elle doit être 7, 10
et ainsi de suite.
- Je n'ai pas besoin que la dernière valeur soit augmentée d'un cran après avoir été consommée (mais c'est ok si c'est le cas).
- Il n'y a pas de problème si les valeurs consommées restent dans l'ensemble, et il importe peu qu'elles soient à leur valeur initiale ou augmentée. En d'autres termes, après la deuxième boucle, il serait correct que l'ensemble contienne
2, 3, 7, 10
o2, 4, 7, 10
ou simplement7, 10
. (L'ensemble va être jeté après cette boucle)
Voici mon code
for (Integer i : positionSet) {
TreeSet <Integer> tmpSet = new TreeSet<>();
//use i for something
//positionSet.remove(i); //I tried with this both on and off, but it made no difference
for (Integer j : positionSet) {
tmpSet.add(j + 1);
}
positionSet.clear();
positionSet.addAll(tmpSet);
}
Il s'écrase au deuxième tour avec un java.util.ConcurrentModificationException
Je suppose que cela est dû au fait que j'ai modifié le jeu utilisé dans l'en-tête de la boucle.
Comment modifier le contenu de l'ensemble tout en le parcourant en boucle ? J'ai essayé de copier le jeu dans les deux sens de plusieurs manières différentes, mais le code échoue constamment avec le même message d'erreur. Je ne dois pas modifier l'ensemble pendant la boucle, or la modification de l'ensemble est le but même de cette boucle.//